Vehicle Detection Project

The goals / steps of this project are the following:

  • Perform a Histogram of Oriented Gradients (HOG) feature extraction on a labeled training set of images and train a classifier Linear SVM classifier
  • Optionally, you can also apply a color transform and append binned color features, as well as histograms of color, to your HOG feature vector.
  • Note: for those first two steps don't forget to normalize your features and randomize a selection for training and testing.
  • Implement a sliding-window technique and use your trained classifier to search for vehicles in images.
  • Run your pipeline on a video stream (start with the test_video.mp4 and later implement on full project_video.mp4) and create a heat map of recurring detections frame by frame to reject outliers and follow detected vehicles.
  • Estimate a bounding box for vehicles detected.

Generate a list of images to read in

In [6]:
import os
import glob

# images are divided up into vehicles and non-vehicles folders, each of which
# contains subfolders. First locate vehicle images

basedir = '/Users/dyz/Downloads/vehicles/'
image_types = os.listdir(basedir)
cars = []
for imtype in image_types:
    cars.extend(glob.glob(basedir + imtype + '/*'))
    
print('Number of vehicle images found:', len(cars))
with open('cars.txt', 'w') as f:
    for fn in cars:
        f.write(fn + '\n')

# non vehicle images
basedir = '/Users/dyz/Downloads/non-vehicles/'
image_types = os.listdir(basedir)
notcars = []
for imtype in image_types:
    notcars.extend(glob.glob(basedir + imtype + '/*'))
    
print('Number of non vehicle images found:', len(notcars))
with open('notcars.txt', 'w') as f:
    for fn in notcars:
        f.write(fn + '\n')
Number of vehicle images found: 8792
Number of non vehicle images found: 8968

Define functions required for feature extraction etc

In [69]:
import numpy as np
import cv2
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from skimage.feature import hog
import time
from sklearn.svm import LinearSVC
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

%matplotlib inline
In [79]:
# Define a function to return HOG features and visualization
def get_hog_features(img, orient, pix_per_cell, cell_per_block, vis=False, feature_vec=True):
    if vis == True:
        features, hog_image = hog(img, orientations=orient, pixels_per_cell=(pix_per_cell, pix_per_cell),
                                  cells_per_block=(cell_per_block, cell_per_block), transform_sqrt=False, 
                                  visualise=True, feature_vector=feature_vec)
        return features, hog_image
    else:      
        features = hog(img, orientations=orient, pixels_per_cell=(pix_per_cell, pix_per_cell),
                       cells_per_block=(cell_per_block, cell_per_block), transform_sqrt=False, 
                       visualise=False, feature_vector=feature_vec)
        return features
    
# Define a function to compute color histogram features  
# Pass the color_space flag as 3-letter all caps string
# like 'HSV' or 'LUV' etc.
# KEEP IN MIND IF YOU DECIDE TO USE THIS FUNCTION LATER
# IN YOUR PROJECT THAT IF YOU READ THE IMAGE WITH 
# cv2.imread() INSTEAD YOU START WITH BGR COLOR!
def bin_spatial(img, size=(32, 32)):
    # Use cv2.resize().ravel() to create the feature vector
    color1 = cv2.resize(img[:,:,0], size).ravel()
    color2 = cv2.resize(img[:,:,1], size).ravel()
    color3 = cv2.resize(img[:,:,2], size).ravel()
    return np.hstack((color1, color2, color3))

# Define a function to compute color histogram features  
def color_hist(img, nbins=32):
    # Compute the histogram of the color channels separately
    channel1_hist = np.histogram(img[:,:,0], bins=nbins)
    channel2_hist = np.histogram(img[:,:,1], bins=nbins)
    channel3_hist = np.histogram(img[:,:,2], bins=nbins)
    # Concatenate the histograms into a single feature vector
    hist_features = np.concatenate((channel1_hist[0], channel2_hist[0], channel3_hist[0]))
    # Return the individual histograms, bin_centers and feature vector
    return hist_features


# Define a function to extract features from a list of images
def extract_features(imgs, color_space='RGB', spatial_size=(32, 32),
                        hist_bins=32, orient=9, 
                        pix_per_cell=8, cell_per_block=2, hog_channel=0,
                        spatial_feat=True, hist_feat=True, hog_feat=True):    
    #1) Define an empty list to receive features
    features = []
    for file in imgs:
        file_features = []
        img = mpimg.imread(file)
        #2) Apply color conversion if other than 'RGB'
        if color_space != 'RGB':
            if color_space == 'HSV':
                feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
            elif color_space == 'LUV':
                feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2LUV)
            elif color_space == 'HLS':
                feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2HLS)
            elif color_space == 'YUV':
                feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2YUV)
            elif color_space == 'YCrCb':
                feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2YCrCb)
        else: feature_image = np.copy(img)      
        #3) Compute spatial features if flag is set
        if spatial_feat == True:
            spatial_features = bin_spatial(feature_image, size=spatial_size)
            #4) Append features to list
            file_features.append(spatial_features)
        #5) Compute histogram features if flag is set
        if hist_feat == True:
            hist_features = color_hist(feature_image, nbins=hist_bins)
            #6) Append features to list
            file_features.append(hist_features)
        #7) Compute HOG features if flag is set
        if hog_feat == True:
            if hog_channel == 'ALL':
                hog_features = []
                for channel in range(feature_image.shape[2]):
                    hog_features.extend(get_hog_features(feature_image[:,:,channel], 
                                        orient, pix_per_cell, cell_per_block, 
                                        vis=False, feature_vec=True))      
            else:
                hog_features = get_hog_features(feature_image[:,:,hog_channel], orient, 
                            pix_per_cell, cell_per_block, vis=False, feature_vec=True)
            #8) Append features to list
            file_features.append(hog_features)
        features.append(np.concatenate(file_features))

    #9) Return concatenated array of features for all the files
    return features


# Define a function that takes an image,
# start and stop positions in both x and y, 
# window size (x and y dimensions),  
# and overlap fraction (for both x and y)
def slide_window(img, x_start_stop=[None, None], y_start_stop=[None, None], 
                    xy_window=(64, 64), xy_overlap=(0.5, 0.5)):
    # If x and/or y start/stop positions not defined, set to image size
    if x_start_stop[0] == None:
        x_start_stop[0] = 0
    if x_start_stop[1] == None:
        x_start_stop[1] = img.shape[1]
    if y_start_stop[0] == None:
        y_start_stop[0] = 0
    if y_start_stop[1] == None:
        y_start_stop[1] = img.shape[0]
    # Compute the span of the region to be searched    
    xspan = x_start_stop[1] - x_start_stop[0]
    yspan = y_start_stop[1] - y_start_stop[0]
    # Compute the number of pixels per step in x/y
    nx_pix_per_step = np.int(xy_window[0]*(1 - xy_overlap[0]))
    ny_pix_per_step = np.int(xy_window[1]*(1 - xy_overlap[1]))
    # Compute the number of windows in x/y
    nx_buffer = np.int(xy_window[0]*(xy_overlap[0]))
    ny_buffer = np.int(xy_window[1]*(xy_overlap[1]))
    nx_windows = np.int((xspan-nx_buffer)/nx_pix_per_step) 
    ny_windows = np.int((yspan-ny_buffer)/ny_pix_per_step) 
    # Initialize a list to append window positions to
    window_list = []
    # Loop through finding x and y window positions
    # Note: you could vectorize this step, but in practice
    # you'll be considering windows one by one with your
    # classifier, so looping makes sense
    for ys in range(ny_windows):
        for xs in range(nx_windows):
            # Calculate window position
            startx = xs*nx_pix_per_step + x_start_stop[0]
            endx = startx + xy_window[0]
            starty = ys*ny_pix_per_step + y_start_stop[0]
            endy = starty + xy_window[1]
            # Append window position to list
            window_list.append(((startx, starty), (endx, endy)))
    # Return the list of windows
    return window_list

# Define a function that takes an image, a list of bounding boxes, 
# and optional color tuple and line thickness as inputs
# then draws boxes in that color on the output


def draw_boxes(img, bboxes, color=(0, 0, 255), thick=6):
    # make a copy of the image
    draw_img = np.copy(img)
    # draw each bounding box on your image copy using cv2.rectangle()
    for bbox in bboxes:
        # Draw a rectangle given bbox coordinates
        cv2.rectangle(draw_img, bbox[0], bbox[1], color, thick)
    # return the image copy with boxes drawn
    return draw_img # Change this line to return image copy with boxes
    

# Define a function to extract features from a single image window
# This function is very similar to extract_features()
# just for a single image rather than list of images
def single_img_features(img, color_space='RGB', spatial_size=(32, 32),
                        hist_bins=32, orient=9, 
                        pix_per_cell=8, cell_per_block=2, hog_channel=0,
                        spatial_feat=True, hist_feat=True, hog_feat=True, vis = False):    
    #1) Define an empty list to receive features
    img_features = []
    #2) Apply color conversion if other than 'RGB'
    if color_space != 'RGB':
        if color_space == 'HSV':
            feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
        elif color_space == 'LUV':
            feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2LUV)
        elif color_space == 'HLS':
            feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2HLS)
        elif color_space == 'YUV':
            feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2YUV)
        elif color_space == 'YCrCb':
            feature_image = cv2.cvtColor(img, cv2.COLOR_RGB2YCrCb)
    else: feature_image = np.copy(img)      
    #3) Compute spatial features if flag is set
    if spatial_feat == True:
        spatial_features = bin_spatial(feature_image, size=spatial_size)
        #4) Append features to list
        img_features.append(spatial_features)
    #5) Compute histogram features if flag is set
    if hist_feat == True:
        hist_features = color_hist(feature_image, nbins=hist_bins)
        #6) Append features to list
        img_features.append(hist_features)
    #7) Compute HOG features if flag is set
    if hog_feat == True:
        if hog_channel == 'ALL':
            hog_features = []
            for channel in range(feature_image.shape[2]):
                hog_features.extend(get_hog_features(feature_image[:,:,channel], 
                                    orient, pix_per_cell, cell_per_block, 
                                    vis=False, feature_vec=True))      
        else:
            if vis:
                hog_features, hog_image = get_hog_features(feature_image[:,:,hog_channel], orient, 
                        pix_per_cell, cell_per_block, vis=True, feature_vec=True)
            else:
                hog_features = get_hog_features(feature_image[:,:,hog_channel], orient, 
                        pix_per_cell, cell_per_block, vis=False, feature_vec=True)
        #8) Append features to list
        img_features.append(hog_features)

    #9) Return concatenated array of features
    if vis:
        return np.concatenate(img_features), hog_image
    else:
        return np.concatenate(img_features)


# Define a function you will pass an image 
# and the list of windows to be searched (output of slide_windows())
def search_windows(img, windows, clf, scaler, color_space='RGB', 
                    spatial_size=(32, 32), hist_bins=32, 
                    hist_range=(0, 256), orient=9, 
                    pix_per_cell=8, cell_per_block=2, 
                    hog_channel=0, spatial_feat=True, 
                    hist_feat=True, hog_feat=True):

    #1) Create an empty list to receive positive detection windows
    on_windows = []
    #2) Iterate over all windows in the list
    for window in windows:
        #3) Extract the test window from original image
        test_img = cv2.resize(img[window[0][1]:window[1][1], window[0][0]:window[1][0]], (64, 64))      
        #4) Extract features for that window using single_img_features()
        features = single_img_features(test_img, color_space=color_space, 
                            spatial_size=spatial_size, hist_bins=hist_bins, 
                            orient=orient, pix_per_cell=pix_per_cell, 
                            cell_per_block=cell_per_block, 
                            hog_channel=hog_channel, spatial_feat=spatial_feat, 
                            hist_feat=hist_feat, hog_feat=hog_feat)
        #5) Scale extracted features to be fed to classifier
        test_features = scaler.transform(np.array(features).reshape(1, -1))
        #6) Predict using your classifier
        prediction = clf.predict(test_features)
        #7) If positive (prediction == 1) then save the window
        if prediction == 1:
            on_windows.append(window)
    #8) Return windows for positive detections
    return on_windows

def visualize(fig, rows, cols, imgs, titles):
    for i, img in enumerate(imgs):
        plt.subplot(rows, cols, i + 1)
        plt.title(i + 1)
        if len(img.shape) < 3:
            plt.imshow(img, cmap='hot')
        else:
            plt.imshow(img)
        plt.title(titles[i])
        
def plot3d(pixels, colors_rgb,
    axis_labels=list("RGB"), axis_limits=[(0, 255), (0, 255), (0, 255)]):
    """Plot pixels in 3D."""

    # Create figure and 3D axes
    fig = plt.figure(figsize=(8, 8))
    ax = Axes3D(fig)

    # Set axis limits
    ax.set_xlim(*axis_limits[0])
    ax.set_ylim(*axis_limits[1])
    ax.set_zlim(*axis_limits[2])

    # Set axis labels and sizes
    ax.tick_params(axis='both', which='major', labelsize=14, pad=8)
    ax.set_xlabel(axis_labels[0], fontsize=16, labelpad=16)
    ax.set_ylabel(axis_labels[1], fontsize=16, labelpad=16)
    ax.set_zlabel(axis_labels[2], fontsize=16, labelpad=16)

    # Plot pixel values with colors given in colors_rgb
    ax.scatter(
        pixels[:, :, 0].ravel(),
        pixels[:, :, 1].ravel(),
        pixels[:, :, 2].ravel(),
        c=colors_rgb.reshape((-1, 3)), edgecolors='none')

    return ax  # return Axes3D object for further manipulation

HOG feature parameters

In [120]:
carimage = mpimg.imread(cars[0])
notcarimage = mpimg.imread(notcars[0])
print(carimage.shape)
print(notcarimage.shape)

def bin_spatial0(img, size=(32, 32)):
    # Convert image to new color space (if specified)
    # Use cv2.resize().ravel() to create the feature vector
    # Use cv2.resize().ravel() to create the feature vector
    features = cv2.resize(img, size).ravel() 
    # Return the feature vector
    return features

def bin_spatial1(img, size=(32, 32)):
    color1 = cv2.resize(img[:,:,0], size).ravel()
    color2 = cv2.resize(img[:,:,1], size).ravel()
    color3 = cv2.resize(img[:,:,2], size).ravel()
    # Convert image to new color space (if specified)
    # Use cv2.resize().ravel() to create the feature vector
    # Use cv2.resize().ravel() to create the feature vector
    # Return the feature vector
    return np.hstack((color1, color2, color3))

print(bin_spatial0(image)[:9])
print(bin_spatial1(image)[:9])
(64, 64, 3)
(64, 64, 3)
[ 0.61176473  0.65882355  0.63921571  0.60980392  0.65294123  0.63529414
  0.60196078  0.63921571  0.62352943]
[ 0.61176473  0.60980392  0.60196078  0.5862745   0.55882359  0.52941179
  0.52156866  0.50196081  0.47647059]
In [130]:
def HOG_param_exploration(img1, img2, orients = 6, pix_per_cell = 8, cells_per_block = 2):
    f1, h1 = get_hog_features(img1,orients,pix_per_cell,cells_per_block,True,False)
    print('HOG dimension: ', f1.shape)
    f1, h1 = get_hog_features(img1,orients,pix_per_cell,cells_per_block,True,True)
    print('HOG features:', f1.shape)
    f2, h2 = get_hog_features(img2,orients,pix_per_cell,cells_per_block,True,True)
    print('distance of car and non car HOG feature vectors:', np.linalg.norm(f2-f1))
    fig = plt.figure()
    visualize(fig, 1, 2, [h1,h2], ['', ''])
In [132]:
HOG_param_exploration(carimage[:,:,0],notcarimage[:,:,0],6,8,2)
HOG_param_exploration(carimage[:,:,0],notcarimage[:,:,0],6,8,1)
HOG_param_exploration(carimage[:,:,0],notcarimage[:,:,0],9,8,2)
HOG_param_exploration(carimage[:,:,0],notcarimage[:,:,0],9,8,1)
HOG_param_exploration(carimage[:,:,0],notcarimage[:,:,0],6,16,2)
HOG_param_exploration(carimage[:,:,0],notcarimage[:,:,0],6,16,1)
HOG_param_exploration(carimage[:,:,0],notcarimage[:,:,0],9,16,2)
HOG_param_exploration(carimage[:,:,0],notcarimage[:,:,0],9,16,1)
HOG dimension:  (7, 7, 2, 2, 6)
HOG features: (1176,)
distance of car and non car HOG feature vectors: 2.38234371541
HOG dimension:  (8, 8, 1, 1, 6)
HOG features: (384,)
distance of car and non car HOG feature vectors: 3.76111336373
HOG dimension:  (7, 7, 2, 2, 9)
HOG features: (1764,)
distance of car and non car HOG feature vectors: 2.40785095273
HOG dimension:  (8, 8, 1, 1, 9)
HOG features: (576,)
distance of car and non car HOG feature vectors: 3.6547053891
HOG dimension:  (3, 3, 2, 2, 6)
HOG features: (216,)
distance of car and non car HOG feature vectors: 0.79194006214
HOG dimension:  (4, 4, 1, 1, 6)
HOG features: (96,)
distance of car and non car HOG feature vectors: 1.41870932594
HOG dimension:  (3, 3, 2, 2, 9)
HOG features: (324,)
distance of car and non car HOG feature vectors: 0.794630196639
HOG dimension:  (4, 4, 1, 1, 9)
HOG features: (144,)
distance of car and non car HOG feature vectors: 1.48928671611

Visualize the feature for car and non car image

In [66]:
# choose random car / non car indices
car_ind = np.random.randint(0, len(cars))
notcar_ind = np.random.randint(0, len(notcars))

# read in car / non car images
car_image = mpimg.imread(cars[car_ind])
notcar_image = mpimg.imread(notcars[notcar_ind])

#define feature parameters

color_space = 'RGB' # Can be RGB, HSV, LUV, HLS, YUV, YCrCb
orient = 6  # HOG orientations
pix_per_cell = 8 # HOG pixels per cell
cell_per_block = 2 # HOG cells per block
hog_channel = 0 # Can be 0, 1, 2, or "ALL"
spatial_size = (16, 16) # Spatial binning dimensions
hist_bins = 16    # Number of histogram bins
spatial_feat = True # Spatial features on or off
hist_feat = True # Histogram features on or off
hog_feat = True # HOG features on or off

car_features, car_hog_image = single_img_features(car_image, color_space = color_space,
                        spatial_size=spatial_size, hist_bins=hist_bins, orient=orient, 
                        pix_per_cell=pix_per_cell, cell_per_block=cell_per_block, hog_channel=hog_channel,
                        spatial_feat=spatial_feat, hist_feat=hist_feat, hog_feat=hog_feat, vis = True)

notcar_features, notcar_hog_image = single_img_features(notcar_image, color_space = color_space,
                        spatial_size=spatial_size, hist_bins=hist_bins, orient=orient, 
                        pix_per_cell=pix_per_cell, cell_per_block=cell_per_block, hog_channel=hog_channel,
                        spatial_feat=spatial_feat, hist_feat=hist_feat, hog_feat=hog_feat, vis = True)

images = [car_image, car_hog_image, notcar_image, notcar_hog_image]
titles = ['car image', 'car HOG image', 'notcar image', 'notcar HOG image']
fig = plt.figure(figsize=(12, 3))
visualize(fig, 1, 4, images, titles)

Train the model, tweak feature selection to optimize validation accuracy

In [104]:
#define feature parameters

color_space = 'YCrCb' # Can be RGB, HSV, LUV, HLS, YUV, YCrCb
orient = 9  # HOG orientations
pix_per_cell = 8 # HOG pixels per cell
cell_per_block = 2 # HOG cells per block
hog_channel = 'ALL' # Can be 0, 1, 2, or "ALL"
spatial_size = (32, 32) # Spatial binning dimensions
hist_bins = 16    # Number of histogram bins
spatial_feat = True # Spatial features on or off
hist_feat = True # Histogram features on or off
hog_feat = True # HOG features on or off

t = time.time()
n_samples = 1000
random_idxs = np.random.randint(0, len(cars), n_samples)
test_cars = cars #np.array(cars)[random_idxs]
test_notcars = notcars #np.array(notcars)[random_idxs]

car_features = extract_features(test_cars, color_space = color_space,
                        spatial_size=spatial_size, hist_bins=hist_bins, orient=orient, 
                        pix_per_cell=pix_per_cell, cell_per_block=cell_per_block, hog_channel=hog_channel,
                        spatial_feat=spatial_feat, hist_feat=hist_feat, hog_feat=hog_feat)

notcar_features = extract_features(test_notcars, color_space = color_space,
                        spatial_size=spatial_size, hist_bins=hist_bins, orient=orient, 
                        pix_per_cell=pix_per_cell, cell_per_block=cell_per_block, hog_channel=hog_channel,
                        spatial_feat=spatial_feat, hist_feat=hist_feat, hog_feat=hog_feat)

print(time.time() - t, 'seconds to complete feature extraction')

X = np.vstack((car_features, notcar_features)).astype(np.float64)                        
# Fit a per-column scaler
X_scaler = StandardScaler().fit(X)
# Apply the scaler to X
scaled_X = X_scaler.transform(X)

# Define the labels vector
y = np.hstack((np.ones(len(car_features)), np.zeros(len(notcar_features))))

# Split up data into randomized training and test sets
rand_state = np.random.randint(0, 100)
X_train, X_test, y_train, y_test = train_test_split(
    scaled_X, y, test_size=0.2, random_state=rand_state)

print('Using:',orient,'orientations',pix_per_cell,
    'pixels per cell and', cell_per_block,'cells per block')
print('Feature vector length:', len(X_train[0]))
# Use a linear SVC 
svc = LinearSVC()
# Check the training time for the SVC
t=time.time()
svc.fit(X_train, y_train)
t2 = time.time()
print(round(t2-t, 2), 'Seconds to train SVC...')
# Check the score of the SVC
print('Test Accuracy of SVC = ', round(svc.score(X_test, y_test), 4))
# Check the prediction time for a single sample
t=time.time()
n_predict = 10
print('My SVC predicts: ', svc.predict(X_test[0:n_predict]))
print('For these',n_predict, 'labels: ', y_test[0:n_predict])
t2 = time.time()
print(round(t2-t, 5), 'Seconds to predict', n_predict,'labels with SVC')
85.50593495368958 seconds to complete feature extraction
Using: 9 orientations 8 pixels per cell and 2 cells per block
Feature vector length: 8412
6.93 Seconds to train SVC...
Test Accuracy of SVC =  0.9913
My SVC predicts:  [ 0.  0.  0.  0.  0.  0.  1.  0.  1.  1.]
For these 10 labels:  [ 0.  0.  0.  0.  0.  0.  1.  0.  1.  1.]
0.00179 Seconds to predict 10 labels with SVC

Test the classifier on test images, tweak parameters to optimize car detection

In [413]:
searchpath = 'test_images/*'
example_images = glob.glob(searchpath)
images = []
titles = []
y_start_stop = [400, 656] # Min and max in y to search in slide_window()
overlap = 0.5
run_once = True
windows = []
for img_src in example_images:
    t1 = time.time()
    img = mpimg.imread(img_src)
    draw_img = np.copy(img)
    # needs to normalize to png with which the classifier is trained
    img = img.astype(np.float32)/255
    
    if run_once:
        windows = slide_window(img, x_start_stop=[None, None], y_start_stop=y_start_stop, 
                        xy_window=(64, 64), xy_overlap=(0.5, 0.5))
        
        all_windows_img = draw_boxes(draw_img, windows, color=(255, 0, 0), thick=3)                       

        windows_more = slide_window(img, x_start_stop=[None, None], y_start_stop=y_start_stop, 
                        xy_window=(96, 96), xy_overlap=(0.5, 0.5))
        windows.extend(windows_more)
        
        all_windows_img = draw_boxes(all_windows_img, windows_more, color=(0, 255, 0), thick=3)                       


        windows_more = slide_window(img, x_start_stop=[None, None], y_start_stop=y_start_stop, 
                        xy_window=(128, 128), xy_overlap=(0.5, 0.5))
        windows.extend(windows_more)
        
        all_windows_img = draw_boxes(all_windows_img, windows_more, color=(0, 0, 255), thick=3)                       

        run_once = False

    hot_windows = search_windows(img, windows, svc, X_scaler, color_space=color_space, 
                            spatial_size=spatial_size, hist_bins=hist_bins, 
                            orient=orient, pix_per_cell=pix_per_cell, 
                            cell_per_block=cell_per_block, 
                            hog_channel=hog_channel, spatial_feat=spatial_feat, 
                            hist_feat=hist_feat, hog_feat=hog_feat)                       

    hot_window_img = draw_boxes(draw_img, hot_windows, color=(0, 0, 255), thick=6)                    
    images.append(hot_window_img)
    titles.append('')
    print(time.time() - t1, 'seconds to process one image searching', len(windows), 'windows')

plt.figure(figsize=(24,12))
plt.imshow(all_windows_img)
fig = plt.figure(figsize=(12,18))
visualize(fig, 6, 2, images, titles)
1.9314320087432861 seconds to process one image searching 430 windows
1.9900920391082764 seconds to process one image searching 430 windows
1.9429800510406494 seconds to process one image searching 430 windows
1.7981958389282227 seconds to process one image searching 430 windows
1.7815701961517334 seconds to process one image searching 430 windows
1.7474641799926758 seconds to process one image searching 430 windows

Optimize the computation by scaling + HOG entire image once + subsampling

In [201]:
out_images = []
out_maps = []
out_titles = []
out_boxes = []

ystart = 400
ystop = 656
scale = 1.5

for img_src in example_images:
    img_boxes = []
    t = time.time()
    img = mpimg.imread(img_src)
    draw_img = np.copy(img)
    # init the heat map
    heatmap = np.zeros_like(img[:,:,0])
    img = img.astype(np.float32)/255
    
    img_tosearch = img[ystart:ystop, :, :]
    ctrans_tosearch = cv2.cvtColor(img_tosearch, cv2.COLOR_RGB2YCrCb)
    if scale != 1:
        imshape = ctrans_tosearch.shape
        ctrans_tosearch = cv2.resize(ctrans_tosearch, (np.int(imshape[1]/scale), np.int(imshape[0]/scale)))

    ch1 = ctrans_tosearch[:,:,0]
    ch2 = ctrans_tosearch[:,:,1]
    ch3 = ctrans_tosearch[:,:,2]
    
    nxblocks = (ch1.shape[1] // pix_per_cell) - 1 # cells per block: 2
    nyblocks = (ch1.shape[0] // pix_per_cell) - 1
    nfeat_per_block = orient * cell_per_block ** 2
    window = 64
    nblocks_per_window = (window // pix_per_cell) - 1
    # instead of overlap, define how many cells to step
    # this is a smaller step size since overlap equals to 1 - 2 / 8 = 0.75
    # since there are lots of time saved by not computing HOG for each window
    # search more carefully with larger overlap
    cells_per_step = 2
    nxsteps = (nxblocks - nblocks_per_window) // cells_per_step
    nysteps = (nyblocks - nblocks_per_window) // cells_per_step

    hog1 = get_hog_features(ch1, orient, pix_per_cell, cell_per_block, feature_vec = False)
    hog2 = get_hog_features(ch2, orient, pix_per_cell, cell_per_block, feature_vec = False)
    hog3 = get_hog_features(ch3, orient, pix_per_cell, cell_per_block, feature_vec = False)
    for xb in range(nxsteps):
        for yb in range(nysteps):
            count += 1
            ypos = yb * cells_per_step
            xpos = xb * cells_per_step
            # extract HOG for this patch
            hog_feat1 = hog1[ypos : ypos + nblocks_per_window, xpos : xpos + nblocks_per_window].ravel()
            hog_feat2 = hog2[ypos : ypos + nblocks_per_window, xpos : xpos + nblocks_per_window].ravel()
            hog_feat3 = hog3[ypos : ypos + nblocks_per_window, xpos : xpos + nblocks_per_window].ravel()
            hog_features = np.hstack((hog_feat1, hog_feat2, hog_feat3))
            
            xleft = xpos * pix_per_cell
            ytop = ypos * pix_per_cell
            
            # extract the image patch
            subimg = cv2.resize(ctrans_tosearch[ytop : ytop + window, xleft : xleft + window], (window,window))

            # color feastures
            spatial_features = bin_spatial(subimg, size=spatial_size)
            hist_features = color_hist(subimg, nbins=hist_bins)
            
            # scale features and predict
            test_features = X_scaler.transform(np.hstack((spatial_features, hist_features, hog_features)).reshape(1, -1))
            test_prediction = svc.predict(test_features)
            
            if test_prediction == 1:
                xbox_left = np.int(xleft * scale)
                ytop_draw = np.int(ytop * scale)
                win_draw = np.int(window * scale)
                cv2.rectangle(draw_img, (xbox_left, ytop_draw + ystart), (xbox_left + win_draw, ytop_draw + win_draw + ystart),
                              (0,0,255), 6)
                img_boxes.append(((xbox_left, ytop_draw + ystart), (xbox_left + win_draw, ytop_draw + win_draw + ystart)))
                heatmap[ytop_draw + ystart : ytop_draw + ystart + win_draw, xbox_left : xbox_left + win_draw] += 1
    
    print(time.time() - t, 'seconds to process', nxsteps * nysteps, 'windows')
    out_images.append(draw_img)
    out_titles.append(img_src[-9:])
    out_images.append(heatmap)
    out_titles.append(img_src[-9:])
    out_maps.append(heatmap)
    out_boxes.append(img_boxes)
    
fig = plt.figure(figsize=(12,24))
visualize(fig, 6, 2, out_images, out_titles)
0.39569687843322754 seconds to process 294 windows
0.5054891109466553 seconds to process 294 windows
0.36809301376342773 seconds to process 294 windows
0.4032270908355713 seconds to process 294 windows
0.35880517959594727 seconds to process 294 windows
0.354233980178833 seconds to process 294 windows

Video pipeline

In [404]:
def find_cars(img, scale = 1.0, ystart = 400, ystop = 656):
    t = time.time()
    draw_img = np.copy(img)
    # init the heat map
    heatmap = np.zeros_like(img[:,:,0])
    img = img.astype(np.float32)/255
    
    img_tosearch = img[ystart:ystop, :, :]
    ctrans_tosearch = cv2.cvtColor(img_tosearch, cv2.COLOR_RGB2YCrCb)
    if scale != 1:
        imshape = ctrans_tosearch.shape
        ctrans_tosearch = cv2.resize(ctrans_tosearch, (np.int(imshape[1]/scale), np.int(imshape[0]/scale)))

    ch1 = ctrans_tosearch[:,:,0]
    ch2 = ctrans_tosearch[:,:,1]
    ch3 = ctrans_tosearch[:,:,2]
    
    nxblocks = (ch1.shape[1] // pix_per_cell) - 1 # cells per block: 2
    nyblocks = (ch1.shape[0] // pix_per_cell) - 1
    nfeat_per_block = orient * cell_per_block ** 2
    window = 64
    nblocks_per_window = (window // pix_per_cell) - 1
    # instead of overlap, define how many cells to step
    # this is a smaller step size since overlap equals to 1 - 2 / 8 = 0.75
    # since there are lots of time saved by not computing HOG for each window
    # search more carefully with larger overlap
    cells_per_step = 2
    nxsteps = (nxblocks - nblocks_per_window) // cells_per_step
    nysteps = (nyblocks - nblocks_per_window) // cells_per_step

    hog1 = get_hog_features(ch1, orient, pix_per_cell, cell_per_block, feature_vec = False)
    hog2 = get_hog_features(ch2, orient, pix_per_cell, cell_per_block, feature_vec = False)
    hog3 = get_hog_features(ch3, orient, pix_per_cell, cell_per_block, feature_vec = False)
    
    for xb in range(nxsteps):
        for yb in range(nysteps):
            ypos = yb * cells_per_step
            xpos = xb * cells_per_step
            # extract HOG for this patch
            hog_feat1 = hog1[ypos : ypos + nblocks_per_window, xpos : xpos + nblocks_per_window].ravel()
            hog_feat2 = hog2[ypos : ypos + nblocks_per_window, xpos : xpos + nblocks_per_window].ravel()
            hog_feat3 = hog3[ypos : ypos + nblocks_per_window, xpos : xpos + nblocks_per_window].ravel()
            hog_features = np.hstack((hog_feat1, hog_feat2, hog_feat3))
            
            xleft = xpos * pix_per_cell
            ytop = ypos * pix_per_cell
            
            # extract the image patch
            subimg = cv2.resize(ctrans_tosearch[ytop : ytop + window, xleft : xleft + window], (window,window))

            # color feastures
            spatial_features = bin_spatial(subimg, size=spatial_size)
            hist_features = color_hist(subimg, nbins=hist_bins)
            
            # scale features and predict
            test_features = X_scaler.transform(np.hstack((spatial_features, hist_features, hog_features)).reshape(1, -1))
            test_prediction = svc.predict(test_features)
            
            if test_prediction == 1:
                xbox_left = np.int(xleft * scale)
                ytop_draw = np.int(ytop * scale)
                win_draw = np.int(window * scale)
                cv2.rectangle(draw_img, (xbox_left, ytop_draw + ystart), (xbox_left + win_draw, ytop_draw + win_draw + ystart),
                              (0,0,255), 6)
                img_boxes.append(((xbox_left, ytop_draw + ystart), (xbox_left + win_draw, ytop_draw + win_draw + ystart)))
                heatmap[ytop_draw + ystart : ytop_draw + ystart + win_draw, xbox_left : xbox_left + win_draw] += 1
#     print(time.time() - t, 'seconds to process', nxsteps * nysteps, 'windows') 
    return draw_img, heatmap
In [395]:
from scipy.ndimage.measurements import label

def add_heat(heatmap, bbox_list):
    # Iterate through list of bboxes
    for box in bbox_list:
        # Add += 1 for all pixels inside each bbox
        # Assuming each "box" takes the form ((x1, y1), (x2, y2))
        heatmap[box[0][1]:box[1][1], box[0][0]:box[1][0]] += 1

    # Return updated heatmap
    return heatmap# Iterate through list of bboxes
    
def apply_threshold(heatmap, threshold):
    # Zero out pixels below the threshold
    heatmap[heatmap <= threshold] = 0
    # Return thresholded map
    return heatmap

def draw_labeled_bboxes(img, labels):
    # Iterate through all detected cars
    for car_number in range(1, labels[1]+1):
        # Find pixels with each car_number label value
        nonzero = (labels[0] == car_number).nonzero()
        # Identify x and y values of those pixels
        nonzeroy = np.array(nonzero[0])
        nonzerox = np.array(nonzero[1])
        xmin = np.min(nonzerox)
        xmax = np.max(nonzerox)
        ymin = np.min(nonzeroy)
        ymax = np.max(nonzeroy)
        if abs((xmax - xmin) * (ymax - ymin)) < 2100 + (ymax + ymin)/2:
            print(xmax - xmin, ymax - ymin)
            continue
        # Define a bounding box based on min/max x and y
        bbox = ((xmin, ymin), (xmax, ymax))
        # Draw the box on the image
        cv2.rectangle(img, bbox[0], bbox[1], (0,0,255), 6)
    # Return the image
    return img
In [405]:
out_images = []
out_maps = []
ystart = 400
ystop = 656
scale = 1.5

for img_src in example_images:
    img = mpimg.imread(img_src)
    out_img, heat_map = find_cars(img, scale)
    labels = label(heat_map)
    draw_img = draw_labeled_bboxes(np.copy(img), labels)
    out_images.append(draw_img)
    out_images.append(heat_map)
    
fig = plt.figure(figsize=(12,24))
visualize(fig, 6, 2, out_images, out_titles)
In [396]:
def process_image_multiimage(img):
    global frame_count
    global heat_map_list
    global heat_map_acc
    global frame_has_car
    scales = [2, 1.5, 0.8]
    lookback_frames = 4 * len(scales)    
    
    for s in scales:
        out_img, heat_map = find_cars(img, s)
        heat_map_list.append(heat_map)
        heat_map_acc += heat_map
        
    if frame_count > lookback_frames:
        for s in scales:
            heat_map_pop = heat_map_list.pop(0)
            heat_map_acc -= heat_map_pop

    heat_map_th = apply_threshold(heat_map_acc, 3)
    labels = label(heat_map_th)
    draw_img = draw_labeled_bboxes(np.copy(img), labels)
    frame_count += 1
    return draw_img
In [397]:
# Import everything needed to edit/save/watch video clips
from moviepy.editor import VideoFileClip
out_dir='./'
output = out_dir+'processed_test_video.mp4'
heat_map_list = []
heat_map_acc = np.zeros((720, 1280))
frame_count = 0
frame_has_car = False
clip = VideoFileClip("test_video.mp4")
out_clip = clip.fl_image(process_image_multiimage) 
%time out_clip.write_videofile(output, audio=False)
[MoviePy] >>>> Building video ./processed_test_video.mp4
[MoviePy] Writing video ./processed_test_video.mp4
 13%|█▎        | 5/39 [00:09<01:05,  1.92s/it]
9 50
 15%|█▌        | 6/39 [00:11<01:02,  1.90s/it]
9 50
 18%|█▊        | 7/39 [00:13<01:01,  1.93s/it]
9 50
 38%|███▊      | 15/39 [00:27<00:43,  1.80s/it]
7 50
 41%|████      | 16/39 [00:29<00:41,  1.80s/it]
7 50
 97%|█████████▋| 38/39 [01:10<00:01,  1.87s/it]
[MoviePy] Done.
[MoviePy] >>>> Video ready: ./processed_test_video.mp4 

CPU times: user 1min 8s, sys: 2.08 s, total: 1min 10s
Wall time: 1min 11s
In [398]:
output = out_dir+'processed_short_video.mp4'
heat_map_list = []
heat_map_acc = np.zeros((720, 1280))
frame_count = 0
frame_has_car = False
clip = VideoFileClip("short.mp4")
out_clip = clip.fl_image(process_image_multiimage) 
%time out_clip.write_videofile(output, audio=False)
[MoviePy] >>>> Building video ./processed_short_video.mp4
[MoviePy] Writing video ./processed_short_video.mp4
 10%|█         | 33/326 [01:01<08:59,  1.84s/it]
25 38
 10%|█         | 34/326 [01:03<09:10,  1.89s/it]
37 38
 11%|█         | 35/326 [01:05<09:24,  1.94s/it]
24 50
37 38
 11%|█         | 36/326 [01:07<09:35,  1.98s/it]
37 38
 11%|█▏        | 37/326 [01:09<09:28,  1.97s/it]
37 38
 12%|█▏        | 38/326 [01:11<09:15,  1.93s/it]
37 38
 12%|█▏        | 39/326 [01:13<09:05,  1.90s/it]
37 38
 12%|█▏        | 40/326 [01:14<09:04,  1.90s/it]
37 38
 13%|█▎        | 41/326 [01:16<09:12,  1.94s/it]
37 38
 13%|█▎        | 42/326 [01:18<09:21,  1.98s/it]
37 38
 13%|█▎        | 43/326 [01:20<09:05,  1.93s/it]
37 38
 13%|█▎        | 44/326 [01:22<08:52,  1.89s/it]
37 38
 14%|█▍        | 45/326 [01:24<09:17,  1.99s/it]
37 38
 14%|█▍        | 46/326 [01:27<09:40,  2.07s/it]
24 38
 14%|█▍        | 47/326 [01:29<09:40,  2.08s/it]
11 25
 15%|█▌        | 49/326 [01:33<09:50,  2.13s/it]
12 37
 16%|█▌        | 51/326 [01:37<09:35,  2.09s/it]
9 25
 18%|█▊        | 60/326 [01:56<09:04,  2.05s/it]
37 37
 19%|█▊        | 61/326 [01:58<09:03,  2.05s/it]
37 12
 19%|█▉        | 62/326 [02:00<08:51,  2.01s/it]
37 12
 19%|█▉        | 63/326 [02:02<08:37,  1.97s/it]
37 12
 20%|█▉        | 64/326 [02:04<08:28,  1.94s/it]
37 12
 20%|█▉        | 65/326 [02:06<08:17,  1.91s/it]
44 50
37 12
 20%|██        | 66/326 [02:08<08:14,  1.90s/it]
44 50
37 12
 21%|██        | 67/326 [02:10<08:19,  1.93s/it]
44 50
37 12
50 19
 21%|██        | 68/326 [02:12<08:33,  1.99s/it]
44 50
37 12
50 19
 21%|██        | 69/326 [02:14<08:34,  2.00s/it]
37 12
50 19
 21%|██▏       | 70/326 [02:16<08:30,  1.99s/it]
37 12
50 19
 22%|██▏       | 71/326 [02:18<08:45,  2.06s/it]
37 12
50 19
 22%|██▏       | 72/326 [02:20<09:03,  2.14s/it]
37 12
 22%|██▏       | 73/326 [02:23<09:12,  2.18s/it]
37 12
 23%|██▎       | 74/326 [02:25<08:55,  2.12s/it]
37 12
 23%|██▎       | 75/326 [02:26<08:36,  2.06s/it]
37 12
 29%|██▉       | 96/326 [03:06<07:20,  1.91s/it]
37 37
 30%|██▉       | 97/326 [03:08<07:23,  1.94s/it]
37 37
 30%|███       | 98/326 [03:10<07:24,  1.95s/it]
50 37
 30%|███       | 99/326 [03:12<07:20,  1.94s/it]
50 37
 31%|███       | 100/326 [03:14<07:29,  1.99s/it]
50 37
 31%|███       | 101/326 [03:16<07:37,  2.03s/it]
50 37
 31%|███▏      | 102/326 [03:19<07:56,  2.13s/it]
50 37
 32%|███▏      | 103/326 [03:21<07:54,  2.13s/it]
50 37
 32%|███▏      | 104/326 [03:23<07:40,  2.08s/it]
50 37
 32%|███▏      | 105/326 [03:25<07:35,  2.06s/it]
50 37
 33%|███▎      | 106/326 [03:27<07:34,  2.07s/it]
50 37
 33%|███▎      | 107/326 [03:29<07:24,  2.03s/it]
50 37
 33%|███▎      | 108/326 [03:31<07:14,  1.99s/it]
50 37
 33%|███▎      | 109/326 [03:33<07:10,  1.99s/it]
50 37
 34%|███▎      | 110/326 [03:35<07:11,  2.00s/it]
50 37
 34%|███▍      | 111/326 [03:37<07:03,  1.97s/it]
50 37
 34%|███▍      | 112/326 [03:39<06:57,  1.95s/it]
50 37
 35%|███▍      | 113/326 [03:41<06:50,  1.93s/it]
50 37
 35%|███▍      | 114/326 [03:42<06:44,  1.91s/it]
50 37
 35%|███▌      | 115/326 [03:44<06:41,  1.90s/it]
50 37
 36%|███▌      | 116/326 [03:46<06:37,  1.89s/it]
50 37
 36%|███▌      | 117/326 [03:48<06:36,  1.90s/it]
50 37
 36%|███▌      | 118/326 [03:50<06:32,  1.89s/it]
50 37
 37%|███▋      | 119/326 [03:52<06:31,  1.89s/it]
50 37
 37%|███▋      | 120/326 [03:54<06:29,  1.89s/it]
50 37
 37%|███▋      | 121/326 [03:56<06:24,  1.88s/it]
50 37
 37%|███▋      | 122/326 [03:57<06:20,  1.87s/it]
50 37
 38%|███▊      | 123/326 [03:59<06:15,  1.85s/it]
50 37
 38%|███▊      | 124/326 [04:01<06:15,  1.86s/it]
50 37
 38%|███▊      | 125/326 [04:03<06:12,  1.86s/it]
50 37
 39%|███▊      | 126/326 [04:05<06:15,  1.88s/it]
50 37
 39%|███▉      | 127/326 [04:07<06:10,  1.86s/it]
50 37
 39%|███▉      | 128/326 [04:08<06:04,  1.84s/it]
50 37
 40%|███▉      | 129/326 [04:10<06:04,  1.85s/it]
50 37
 40%|███▉      | 130/326 [04:12<06:05,  1.87s/it]
50 37
 40%|████      | 131/326 [04:14<06:05,  1.88s/it]
50 37
 40%|████      | 132/326 [04:16<06:04,  1.88s/it]
50 37
 41%|████      | 133/326 [04:18<06:01,  1.87s/it]
50 37
 41%|████      | 134/326 [04:20<05:57,  1.86s/it]
37 37
 41%|████▏     | 135/326 [04:22<05:52,  1.84s/it]
37 37
 42%|████▏     | 136/326 [04:23<05:52,  1.85s/it]
37 37
 42%|████▏     | 137/326 [04:25<05:47,  1.84s/it]
11 25
 43%|████▎     | 140/326 [04:31<05:46,  1.86s/it]
6 50
 43%|████▎     | 141/326 [04:33<05:45,  1.87s/it]
6 50
 44%|████▎     | 142/326 [04:35<05:43,  1.87s/it]
6 50
 44%|████▍     | 143/326 [04:36<05:45,  1.89s/it]
24 37
12 50
 44%|████▍     | 144/326 [04:38<05:41,  1.88s/it]
50 50
12 50
 44%|████▍     | 145/326 [04:40<05:37,  1.86s/it]
50 50
 45%|████▍     | 146/326 [04:42<05:35,  1.86s/it]
28 50
50 50
 45%|████▌     | 147/326 [04:44<05:36,  1.88s/it]
28 50
50 50
 45%|████▌     | 148/326 [04:46<05:34,  1.88s/it]
28 50
50 50
 46%|████▌     | 149/326 [04:48<05:30,  1.87s/it]
28 50
50 50
 46%|████▌     | 150/326 [04:50<05:28,  1.87s/it]
28 50
50 50
37 24
 46%|████▋     | 151/326 [04:51<05:28,  1.88s/it]
28 50
50 50
37 24
 47%|████▋     | 152/326 [04:53<05:32,  1.91s/it]
28 50
50 50
37 24
 47%|████▋     | 153/326 [04:55<05:28,  1.90s/it]
28 50
50 50
37 24
 47%|████▋     | 154/326 [04:57<05:26,  1.90s/it]
28 50
50 50
37 24
 48%|████▊     | 155/326 [04:59<05:23,  1.89s/it]
28 50
50 50
37 24
 48%|████▊     | 156/326 [05:01<05:20,  1.89s/it]
28 50
24 50
11 37
37 24
 48%|████▊     | 157/326 [05:03<05:15,  1.87s/it]
28 50
37 24
1 24
 48%|████▊     | 158/326 [05:05<05:14,  1.87s/it]
28 50
37 24
 49%|████▉     | 159/326 [05:07<05:12,  1.87s/it]
12 37
37 24
 49%|████▉     | 160/326 [05:08<05:10,  1.87s/it]
12 37
37 24
 49%|████▉     | 161/326 [05:10<05:09,  1.88s/it]
12 25
37 24
 50%|████▉     | 162/326 [05:12<05:06,  1.87s/it]
12 25
37 24
 50%|█████     | 163/326 [05:14<05:07,  1.88s/it]
12 25
37 24
 50%|█████     | 164/326 [05:16<05:05,  1.89s/it]
12 25
37 24
 51%|█████     | 165/326 [05:18<05:04,  1.89s/it]
11 25
37 24
 51%|█████     | 166/326 [05:20<05:04,  1.90s/it]
11 25
37 24
 51%|█████     | 167/326 [05:22<05:02,  1.90s/it]
11 25
37 24
 52%|█████▏    | 168/326 [05:24<05:07,  1.94s/it]
37 24
 52%|█████▏    | 169/326 [05:26<05:00,  1.92s/it]
37 24
 52%|█████▏    | 170/326 [05:27<04:57,  1.91s/it]
37 24
 52%|█████▏    | 171/326 [05:29<04:54,  1.90s/it]
37 24
 53%|█████▎    | 172/326 [05:31<04:53,  1.90s/it]
37 24
 53%|█████▎    | 173/326 [05:33<04:49,  1.89s/it]
24 24
 53%|█████▎    | 174/326 [05:35<04:46,  1.88s/it]
24 24
 54%|█████▎    | 175/326 [05:37<04:44,  1.89s/it]
11 24
 54%|█████▍    | 176/326 [05:39<04:44,  1.90s/it]
23 95
8 11
11 24
 54%|█████▍    | 177/326 [05:41<04:42,  1.89s/it]
23 95
8 11
11 12
 55%|█████▍    | 178/326 [05:43<04:39,  1.89s/it]
23 95
8 11
 55%|█████▍    | 179/326 [05:44<04:36,  1.88s/it]
23 95
8 11
 55%|█████▌    | 180/326 [05:46<04:32,  1.87s/it]
23 95
8 11
 56%|█████▌    | 181/326 [05:48<04:28,  1.85s/it]
8 11
 56%|█████▌    | 182/326 [05:50<04:26,  1.85s/it]
8 11
 56%|█████▌    | 183/326 [05:52<04:24,  1.85s/it]
8 11
 56%|█████▋    | 184/326 [05:54<04:24,  1.86s/it]
8 11
 57%|█████▋    | 185/326 [05:56<04:24,  1.88s/it]
8 11
 57%|█████▋    | 186/326 [05:57<04:23,  1.88s/it]
8 11
 57%|█████▋    | 187/326 [05:59<04:24,  1.90s/it]
8 11
 58%|█████▊    | 188/326 [06:01<04:23,  1.91s/it]
8 11
 58%|█████▊    | 189/326 [06:03<04:25,  1.93s/it]
8 11
 58%|█████▊    | 190/326 [06:05<04:31,  2.00s/it]
8 11
 67%|██████▋   | 218/326 [06:59<03:26,  1.92s/it]
12 11
 72%|███████▏  | 235/326 [07:33<03:01,  1.99s/it]
12 37
 72%|███████▏  | 236/326 [07:35<02:55,  1.95s/it]
37 37
 73%|███████▎  | 237/326 [07:36<02:51,  1.93s/it]
37 37
 73%|███████▎  | 238/326 [07:38<02:50,  1.93s/it]
37 37
 73%|███████▎  | 239/326 [07:40<02:48,  1.93s/it]
12 38
37 37
 74%|███████▎  | 240/326 [07:42<02:45,  1.93s/it]
12 38
37 37
 74%|███████▍  | 241/326 [07:44<02:45,  1.94s/it]
12 38
37 37
 74%|███████▍  | 242/326 [07:46<02:50,  2.04s/it]
12 38
37 37
2 37
 75%|███████▍  | 243/326 [07:48<02:46,  2.00s/it]
12 38
37 37
12 37
 75%|███████▍  | 244/326 [07:50<02:42,  1.98s/it]
9 26
12 0
37 37
0 11
 75%|███████▌  | 245/326 [07:52<02:39,  1.97s/it]
9 23
12 0
37 37
 75%|███████▌  | 246/326 [07:54<02:35,  1.94s/it]
9 23
37 37
 76%|███████▌  | 247/326 [07:56<02:31,  1.92s/it]
9 0
11 37
12 37
 76%|███████▌  | 248/326 [07:58<02:34,  1.98s/it]
9 19
 76%|███████▋  | 249/326 [08:00<02:31,  1.97s/it]
9 19
 79%|███████▉  | 258/326 [08:16<02:04,  1.83s/it]
26 71
 79%|███████▉  | 259/326 [08:18<02:06,  1.88s/it]
26 71
 80%|███████▉  | 260/326 [08:20<02:07,  1.93s/it]
26 71
 80%|████████  | 261/326 [08:22<02:04,  1.92s/it]
26 71
 80%|████████  | 262/326 [08:24<02:02,  1.92s/it]
26 71
 81%|████████  | 263/326 [08:26<01:58,  1.88s/it]
26 71
 83%|████████▎ | 271/326 [08:41<01:43,  1.87s/it]
50 50
 83%|████████▎ | 272/326 [08:43<01:42,  1.89s/it]
50 50
 84%|████████▎ | 273/326 [08:45<01:40,  1.90s/it]
50 50
 84%|████████▍ | 274/326 [08:47<01:39,  1.91s/it]
50 50
5 5
 84%|████████▍ | 275/326 [08:49<01:40,  1.97s/it]
50 50
5 5
 85%|████████▍ | 276/326 [08:51<01:38,  1.96s/it]
50 50
 85%|████████▍ | 277/326 [08:53<01:39,  2.02s/it]
50 50
 85%|████████▌ | 278/326 [08:55<01:39,  2.08s/it]
50 50
 86%|████████▌ | 279/326 [08:57<01:36,  2.06s/it]
50 50
 86%|████████▌ | 280/326 [08:59<01:34,  2.04s/it]
50 50
 86%|████████▌ | 281/326 [09:01<01:30,  2.00s/it]
50 50
 87%|████████▋ | 282/326 [09:03<01:27,  1.99s/it]
50 50
 87%|████████▋ | 283/326 [09:05<01:25,  1.98s/it]
37 50
 87%|████████▋ | 284/326 [09:07<01:22,  1.96s/it]
24 37
 89%|████████▊ | 289/326 [09:16<01:09,  1.87s/it]
15 63
 89%|████████▉ | 290/326 [09:18<01:07,  1.87s/it]
15 63
 89%|████████▉ | 291/326 [09:20<01:05,  1.87s/it]
15 63
 90%|████████▉ | 292/326 [09:22<01:03,  1.87s/it]
15 63
 90%|████████▉ | 293/326 [09:24<01:02,  1.88s/it]
6 63
 90%|█████████ | 294/326 [09:26<01:00,  1.89s/it]
6 63
 90%|█████████ | 295/326 [09:28<00:58,  1.90s/it]
6 63
 91%|█████████ | 296/326 [09:29<00:56,  1.88s/it]
6 63
 91%|█████████ | 297/326 [09:31<00:53,  1.86s/it]
6 50
 91%|█████████▏| 298/326 [09:33<00:51,  1.85s/it]
6 50
 93%|█████████▎| 302/326 [09:40<00:44,  1.86s/it]
23 23
 96%|█████████▌| 312/326 [10:00<00:27,  1.98s/it]
12 11
 96%|█████████▌| 313/326 [10:02<00:25,  1.99s/it]
12 11
 96%|█████████▋| 314/326 [10:04<00:23,  1.95s/it]
11 11
 97%|█████████▋| 315/326 [10:07<00:22,  2.07s/it]
6 24
 97%|█████████▋| 316/326 [10:09<00:20,  2.04s/it]
6 24
 97%|█████████▋| 317/326 [10:11<00:18,  2.02s/it]
6 24
 98%|█████████▊| 318/326 [10:13<00:16,  2.00s/it]
6 24
 98%|█████████▊| 319/326 [10:14<00:13,  1.96s/it]
6 24
 98%|█████████▊| 320/326 [10:16<00:11,  1.92s/it]
6 24
 98%|█████████▊| 321/326 [10:18<00:09,  1.90s/it]
6 24
 99%|█████████▉| 322/326 [10:20<00:07,  1.88s/it]
6 24
 99%|█████████▉| 323/326 [10:22<00:05,  1.87s/it]
6 24
 99%|█████████▉| 324/326 [10:24<00:03,  1.90s/it]
6 24
100%|█████████▉| 325/326 [10:26<00:01,  1.88s/it]
6 24
100%|██████████| 326/326 [10:27<00:00,  1.86s/it]
6 24

[MoviePy] Done.
[MoviePy] >>>> Video ready: ./processed_short_video.mp4 

CPU times: user 10min 6s, sys: 20 s, total: 10min 26s
Wall time: 10min 29s
In [406]:
output = out_dir+'processed_ystart_video.mp4'
heat_map_list = []
heat_map_acc = np.zeros((720, 1280))
frame_count = 0
frame_has_car = False
clip = VideoFileClip("ystart.mp4")
out_clip = clip.fl_image(process_image_multiimage) 
%time out_clip.write_videofile(output, audio=False)
[MoviePy] >>>> Building video ./processed_ystart_video.mp4
[MoviePy] Writing video ./processed_ystart_video.mp4
  2%|▏         | 3/151 [00:05<04:51,  1.97s/it]
49 37
  3%|▎         | 4/151 [00:07<04:50,  1.98s/it]
49 37
  3%|▎         | 5/151 [00:10<04:55,  2.02s/it]
49 37
  4%|▍         | 6/151 [00:12<04:58,  2.06s/it]
49 37
  5%|▍         | 7/151 [00:14<04:56,  2.06s/it]
49 37
  5%|▌         | 8/151 [00:16<04:50,  2.03s/it]
49 37
  6%|▌         | 9/151 [00:18<04:46,  2.02s/it]
49 37
  7%|▋         | 10/151 [00:20<04:45,  2.02s/it]
49 37
  7%|▋         | 11/151 [00:22<04:40,  2.00s/it]
49 37
  8%|▊         | 12/151 [00:24<04:35,  1.98s/it]
49 37
  9%|▊         | 13/151 [00:26<04:32,  1.97s/it]
49 37
  9%|▉         | 14/151 [00:28<04:30,  1.98s/it]
49 37
 10%|▉         | 15/151 [00:30<04:27,  1.97s/it]
49 37
 11%|█         | 16/151 [00:31<04:24,  1.96s/it]
12 37
49 37
 11%|█▏        | 17/151 [00:33<04:24,  1.97s/it]
12 37
49 37
 12%|█▏        | 18/151 [00:36<04:28,  2.02s/it]
12 37
49 37
 13%|█▎        | 19/151 [00:38<04:32,  2.06s/it]
12 37
 13%|█▎        | 20/151 [00:40<04:29,  2.06s/it]
12 37
 14%|█▍        | 21/151 [00:42<04:23,  2.03s/it]
12 37
 15%|█▍        | 22/151 [00:44<04:19,  2.01s/it]
12 37
 15%|█▌        | 23/151 [00:46<04:15,  2.00s/it]
12 37
 16%|█▌        | 24/151 [00:48<04:12,  1.99s/it]
12 37
 17%|█▋        | 25/151 [00:50<04:09,  1.98s/it]
12 37
 60%|█████▉    | 90/151 [03:01<02:02,  2.00s/it]
37 24
 60%|██████    | 91/151 [03:03<02:00,  2.01s/it]
37 24
 61%|██████    | 92/151 [03:05<01:58,  2.01s/it]
37 24
 65%|██████▍   | 98/151 [03:17<01:48,  2.05s/it]
24 1
 66%|██████▌   | 99/151 [03:19<01:47,  2.06s/it]
24 1
 70%|██████▉   | 105/151 [03:31<01:32,  2.02s/it]
50 50
4 24
25 11
 70%|███████   | 106/151 [03:33<01:30,  2.01s/it]
50 50
4 24
37 11
 71%|███████   | 107/151 [03:35<01:27,  2.00s/it]
50 50
4 24
37 11
 72%|███████▏  | 108/151 [03:37<01:26,  2.00s/it]
50 50
4 24
37 11
 72%|███████▏  | 109/151 [03:39<01:24,  2.00s/it]
50 50
4 24
6 19
37 11
 73%|███████▎  | 110/151 [03:41<01:22,  2.00s/it]
50 50
4 24
6 19
37 11
 74%|███████▎  | 111/151 [03:43<01:20,  2.01s/it]
50 50
4 24
6 19
37 11
 74%|███████▍  | 112/151 [03:46<01:19,  2.03s/it]
50 50
4 24
6 19
37 11
 75%|███████▍  | 113/151 [03:48<01:17,  2.04s/it]
50 50
4 24
6 19
37 11
 75%|███████▌  | 114/151 [03:50<01:15,  2.05s/it]
50 50
4 24
6 19
37 11
 76%|███████▌  | 115/151 [03:52<01:12,  2.03s/it]
12 37
50 50
4 24
6 19
37 11
 77%|███████▋  | 116/151 [03:54<01:11,  2.03s/it]
25 37
50 50
4 24
6 19
37 11
 77%|███████▋  | 117/151 [03:56<01:09,  2.03s/it]
25 37
50 50
4 24
25 11
6 19
50 25
 78%|███████▊  | 118/151 [03:58<01:06,  2.03s/it]
25 37
50 50
12 11
6 19
50 25
 79%|███████▉  | 119/151 [04:00<01:04,  2.03s/it]
25 37
50 50
6 19
50 25
 79%|███████▉  | 120/151 [04:02<01:02,  2.02s/it]
25 37
50 50
6 19
50 25
3 5
 80%|████████  | 121/151 [04:04<01:00,  2.01s/it]
25 37
50 50
12 5
3 5
 81%|████████  | 122/151 [04:06<00:58,  2.01s/it]
25 37
50 50
12 5
 81%|████████▏ | 123/151 [04:08<00:56,  2.02s/it]
25 37
50 50
12 5
 82%|████████▏ | 124/151 [04:10<00:54,  2.02s/it]
25 37
50 50
12 5
 83%|████████▎ | 125/151 [04:12<00:52,  2.02s/it]
38 37
50 50
12 5
 83%|████████▎ | 126/151 [04:14<00:50,  2.01s/it]
38 37
50 50
 84%|████████▍ | 127/151 [04:16<00:48,  2.01s/it]
38 37
38 50
 85%|████████▍ | 128/151 [04:18<00:46,  2.01s/it]
37 37
25 50
 85%|████████▌ | 129/151 [04:20<00:44,  2.02s/it]
37 37
25 50
 86%|████████▌ | 130/151 [04:22<00:42,  2.03s/it]
25 37
25 50
 87%|████████▋ | 131/151 [04:24<00:40,  2.03s/it]
25 37
25 50
 87%|████████▋ | 132/151 [04:26<00:38,  2.02s/it]
25 37
25 50
 88%|████████▊ | 133/151 [04:28<00:36,  2.03s/it]
25 37
25 50
 89%|████████▊ | 134/151 [04:30<00:34,  2.04s/it]
24 37
25 37
38 50
 89%|████████▉ | 135/151 [04:32<00:32,  2.02s/it]
24 37
25 37
38 50
 90%|█████████ | 136/151 [04:34<00:30,  2.04s/it]
24 37
12 37
38 50
 91%|█████████ | 137/151 [04:36<00:28,  2.03s/it]
37 37
38 50
 91%|█████████▏| 138/151 [04:38<00:26,  2.01s/it]
37 37
38 50
8 9
 92%|█████████▏| 139/151 [04:40<00:23,  2.00s/it]
37 37
38 50
0 9
 93%|█████████▎| 140/151 [04:42<00:21,  1.99s/it]
37 37
38 50
0 9
 93%|█████████▎| 141/151 [04:44<00:19,  1.98s/it]
50 37
38 50
0 9
 94%|█████████▍| 142/151 [04:46<00:17,  1.97s/it]
50 37
38 50
 95%|█████████▍| 143/151 [04:48<00:15,  1.98s/it]
50 37
38 50
20 11
9 0
 95%|█████████▌| 144/151 [04:50<00:14,  2.01s/it]
50 37
38 50
20 11
11 5
 96%|█████████▌| 145/151 [04:52<00:12,  2.06s/it]
63 37
38 50
20 11
 97%|█████████▋| 146/151 [04:54<00:10,  2.08s/it]
63 37
38 50
8 11
 97%|█████████▋| 147/151 [04:56<00:08,  2.08s/it]
63 37
38 50
0 11
 98%|█████████▊| 148/151 [04:58<00:06,  2.06s/it]
38 50
0 11
 99%|█████████▊| 149/151 [05:01<00:04,  2.06s/it]
38 50
0 11
 99%|█████████▉| 150/151 [05:03<00:02,  2.06s/it]
38 50
0 11
100%|██████████| 151/151 [05:05<00:00,  2.04s/it]
38 50
0 11

[MoviePy] Done.
[MoviePy] >>>> Video ready: ./processed_ystart_video.mp4 

CPU times: user 4min 56s, sys: 9.06 s, total: 5min 5s
Wall time: 5min 6s
In [399]:
output = out_dir+'processed_project_video.mp4'
heat_map_list = []
heat_map_acc = np.zeros((720, 1280))
frame_count = 0
frame_has_car = False
clip = VideoFileClip("project_video.mp4")
out_clip = clip.fl_image(process_image_multiimage) 
%time out_clip.write_videofile(output, audio=False)
[MoviePy] >>>> Building video ./processed_project_video.mp4
[MoviePy] Writing video ./processed_project_video.mp4
  1%|          | 8/1261 [00:14<38:31,  1.84s/it]
50 38
  1%|          | 9/1261 [00:16<38:10,  1.83s/it]
50 38
  1%|          | 10/1261 [00:18<37:51,  1.82s/it]
50 38
  1%|          | 11/1261 [00:20<37:35,  1.80s/it]
50 38
  1%|          | 12/1261 [00:21<37:27,  1.80s/it]
50 38
  1%|          | 13/1261 [00:23<37:23,  1.80s/it]
50 38
  1%|          | 14/1261 [00:25<37:27,  1.80s/it]
50 38
  1%|          | 15/1261 [00:27<37:27,  1.80s/it]
50 38
  1%|▏         | 16/1261 [00:29<37:18,  1.80s/it]
50 38
  1%|▏         | 17/1261 [00:30<37:19,  1.80s/it]
50 38
  1%|▏         | 18/1261 [00:32<37:10,  1.79s/it]
50 38
  2%|▏         | 19/1261 [00:34<37:02,  1.79s/it]
50 38
  2%|▏         | 20/1261 [00:36<37:05,  1.79s/it]
50 38
  2%|▏         | 21/1261 [00:38<37:09,  1.80s/it]
50 38
  2%|▏         | 22/1261 [00:39<37:04,  1.80s/it]
50 38
  2%|▏         | 23/1261 [00:41<37:03,  1.80s/it]
50 38
  2%|▏         | 24/1261 [00:43<37:05,  1.80s/it]
37 25
  2%|▏         | 25/1261 [00:45<37:17,  1.81s/it]
12 25
  2%|▏         | 26/1261 [00:47<37:13,  1.81s/it]
12 12
  2%|▏         | 27/1261 [00:48<37:07,  1.81s/it]
12 12
  2%|▏         | 28/1261 [00:50<37:01,  1.80s/it]
12 12
 10%|█         | 132/1261 [04:05<34:16,  1.82s/it]
24 38
 11%|█         | 133/1261 [04:06<34:15,  1.82s/it]
24 38
 11%|█         | 134/1261 [04:08<34:10,  1.82s/it]
62 38
 12%|█▏        | 149/1261 [04:36<33:58,  1.83s/it]
12 37
 12%|█▏        | 150/1261 [04:38<34:15,  1.85s/it]
37 50
 12%|█▏        | 151/1261 [04:40<34:41,  1.88s/it]
12 25
 15%|█▌        | 193/1261 [05:59<32:50,  1.84s/it]
24 37
 15%|█▌        | 194/1261 [06:01<32:40,  1.84s/it]
24 37
 15%|█▌        | 195/1261 [06:03<32:37,  1.84s/it]
24 37
 16%|█▌        | 196/1261 [06:05<32:36,  1.84s/it]
24 37
 16%|█▌        | 197/1261 [06:06<32:31,  1.83s/it]
37 37
 16%|█▌        | 198/1261 [06:08<32:40,  1.84s/it]
37 37
 16%|█▌        | 199/1261 [06:10<32:34,  1.84s/it]
37 37
 16%|█▌        | 200/1261 [06:12<32:51,  1.86s/it]
37 37
 16%|█▌        | 201/1261 [06:14<32:51,  1.86s/it]
37 37
 16%|█▌        | 202/1261 [06:16<33:24,  1.89s/it]
37 37
 16%|█▌        | 203/1261 [06:18<33:08,  1.88s/it]
37 37
 16%|█▌        | 204/1261 [06:20<33:01,  1.87s/it]
37 37
 16%|█▋        | 205/1261 [06:21<32:48,  1.86s/it]
37 37
 16%|█▋        | 206/1261 [06:23<32:44,  1.86s/it]
37 37
 16%|█▋        | 207/1261 [06:25<32:53,  1.87s/it]
37 37
 16%|█▋        | 208/1261 [06:27<32:46,  1.87s/it]
37 37
 17%|█▋        | 209/1261 [06:29<32:55,  1.88s/it]
37 37
 17%|█▋        | 210/1261 [06:31<33:20,  1.90s/it]
37 37
 17%|█▋        | 211/1261 [06:33<33:15,  1.90s/it]
37 37
 17%|█▋        | 212/1261 [06:35<32:53,  1.88s/it]
37 37
 17%|█▋        | 213/1261 [06:37<33:12,  1.90s/it]
37 37
 17%|█▋        | 214/1261 [06:38<33:13,  1.90s/it]
37 37
 17%|█▋        | 215/1261 [06:40<33:25,  1.92s/it]
37 37
 17%|█▋        | 216/1261 [06:42<33:14,  1.91s/it]
37 37
 17%|█▋        | 217/1261 [06:44<32:54,  1.89s/it]
37 37
 17%|█▋        | 218/1261 [06:46<32:30,  1.87s/it]
37 37
 17%|█▋        | 219/1261 [06:48<32:36,  1.88s/it]
37 37
 17%|█▋        | 220/1261 [06:50<33:02,  1.90s/it]
37 37
 18%|█▊        | 221/1261 [06:52<32:47,  1.89s/it]
37 37
 18%|█▊        | 222/1261 [06:54<32:26,  1.87s/it]
24 37
 18%|█▊        | 223/1261 [06:55<32:04,  1.85s/it]
24 37
 18%|█▊        | 224/1261 [06:57<31:51,  1.84s/it]
24 37
 18%|█▊        | 225/1261 [06:59<31:46,  1.84s/it]
24 37
 18%|█▊        | 226/1261 [07:01<31:40,  1.84s/it]
24 37
 18%|█▊        | 227/1261 [07:03<31:25,  1.82s/it]
24 37
 18%|█▊        | 228/1261 [07:04<31:24,  1.82s/it]
24 37
 18%|█▊        | 229/1261 [07:06<31:16,  1.82s/it]
24 37
 19%|█▉        | 244/1261 [07:36<32:28,  1.92s/it]
50 50
 19%|█▉        | 245/1261 [07:38<32:06,  1.90s/it]
6 50
 20%|█▉        | 246/1261 [07:39<32:03,  1.90s/it]
4 26
12 50
 20%|█▉        | 247/1261 [07:41<31:54,  1.89s/it]
4 26
12 50
 20%|█▉        | 248/1261 [07:43<31:48,  1.88s/it]
4 26
12 50
 20%|█▉        | 249/1261 [07:45<31:33,  1.87s/it]
12 50
 20%|█▉        | 250/1261 [07:47<31:26,  1.87s/it]
50 50
12 50
 20%|█▉        | 251/1261 [07:49<31:28,  1.87s/it]
50 50
12 50
 20%|█▉        | 252/1261 [07:51<31:18,  1.86s/it]
50 50
12 50
 20%|██        | 253/1261 [07:52<31:06,  1.85s/it]
50 50
12 50
 20%|██        | 254/1261 [07:54<30:45,  1.83s/it]
50 50
12 50
 20%|██        | 255/1261 [07:56<30:31,  1.82s/it]
50 50
12 50
 20%|██        | 256/1261 [07:58<30:20,  1.81s/it]
38 50
12 50
 20%|██        | 257/1261 [08:00<31:04,  1.86s/it]
12 50
3 11
 20%|██        | 258/1261 [08:02<32:03,  1.92s/it]
12 50
 21%|██        | 259/1261 [08:04<32:45,  1.96s/it]
12 50
 21%|██        | 260/1261 [08:06<33:38,  2.02s/it]
12 50
 21%|██        | 261/1261 [08:08<34:16,  2.06s/it]
12 50
 21%|██        | 262/1261 [08:10<33:35,  2.02s/it]
12 50
 21%|██        | 263/1261 [08:12<33:25,  2.01s/it]
12 50
 21%|██        | 264/1261 [08:14<32:58,  1.98s/it]
12 50
 21%|██        | 265/1261 [08:16<33:14,  2.00s/it]
12 50
 21%|██        | 266/1261 [08:18<33:07,  2.00s/it]
12 50
 21%|██        | 267/1261 [08:20<33:13,  2.01s/it]
12 50
 21%|██▏       | 268/1261 [08:22<33:40,  2.03s/it]
12 50
 21%|██▏       | 269/1261 [08:24<33:30,  2.03s/it]
12 50
 21%|██▏       | 270/1261 [08:26<33:21,  2.02s/it]
12 50
 21%|██▏       | 271/1261 [08:28<32:45,  1.99s/it]
12 50
 22%|██▏       | 272/1261 [08:30<33:12,  2.01s/it]
12 50
 22%|██▏       | 273/1261 [08:32<33:04,  2.01s/it]
12 50
 22%|██▏       | 274/1261 [08:34<32:42,  1.99s/it]
6 50
 22%|██▏       | 275/1261 [08:36<32:26,  1.97s/it]
6 50
 22%|██▏       | 276/1261 [08:38<32:07,  1.96s/it]
6 50
 22%|██▏       | 277/1261 [08:40<31:19,  1.91s/it]
6 50
 22%|██▏       | 278/1261 [08:42<30:47,  1.88s/it]
6 50
 22%|██▏       | 279/1261 [08:43<30:22,  1.86s/it]
6 50
 24%|██▍       | 308/1261 [09:36<28:21,  1.79s/it]
6 12
 25%|██▍       | 309/1261 [09:38<28:39,  1.81s/it]
37 37
 25%|██▍       | 310/1261 [09:40<29:52,  1.88s/it]
50 37
 25%|██▍       | 311/1261 [09:42<30:50,  1.95s/it]
50 37
 25%|██▍       | 312/1261 [09:44<32:30,  2.06s/it]
50 37
 25%|██▍       | 313/1261 [09:46<33:52,  2.14s/it]
50 37
 25%|██▍       | 314/1261 [09:48<33:29,  2.12s/it]
50 37
 25%|██▍       | 315/1261 [09:50<32:41,  2.07s/it]
50 37
 25%|██▌       | 316/1261 [09:53<33:20,  2.12s/it]
50 37
 25%|██▌       | 317/1261 [09:55<32:53,  2.09s/it]
50 37
 25%|██▌       | 318/1261 [09:57<31:55,  2.03s/it]
37 38
50 37
 25%|██▌       | 319/1261 [09:59<31:39,  2.02s/it]
37 38
50 37
 25%|██▌       | 320/1261 [10:00<31:17,  2.00s/it]
50 38
50 37
 25%|██▌       | 321/1261 [10:02<30:27,  1.94s/it]
50 38
38 37
 26%|██▌       | 322/1261 [10:04<30:00,  1.92s/it]
50 38
25 37
 26%|██▌       | 323/1261 [10:06<29:38,  1.90s/it]
50 38
 26%|██▌       | 324/1261 [10:08<29:28,  1.89s/it]
50 38
 26%|██▌       | 325/1261 [10:10<29:27,  1.89s/it]
50 38
 26%|██▌       | 326/1261 [10:12<29:38,  1.90s/it]
50 38
 26%|██▌       | 327/1261 [10:14<29:43,  1.91s/it]
50 38
 26%|██▌       | 328/1261 [10:15<29:23,  1.89s/it]
50 38
 26%|██▌       | 329/1261 [10:17<29:28,  1.90s/it]
50 38
 26%|██▌       | 330/1261 [10:19<29:21,  1.89s/it]
38 38
 26%|██▌       | 331/1261 [10:21<29:22,  1.90s/it]
12 12
 26%|██▋       | 332/1261 [10:23<29:13,  1.89s/it]
12 12
 26%|██▋       | 334/1261 [10:27<29:34,  1.91s/it]
11 37
 27%|██▋       | 335/1261 [10:29<29:42,  1.92s/it]
37 50
 27%|██▋       | 336/1261 [10:31<29:34,  1.92s/it]
20 25
37 50
 27%|██▋       | 337/1261 [10:33<29:03,  1.89s/it]
20 25
37 50
 27%|██▋       | 338/1261 [10:34<28:55,  1.88s/it]
20 25
37 50
 27%|██▋       | 339/1261 [10:36<28:45,  1.87s/it]
20 25
37 50
 27%|██▋       | 340/1261 [10:38<28:46,  1.87s/it]
37 50
 27%|██▋       | 341/1261 [10:40<28:52,  1.88s/it]
37 50
 27%|██▋       | 342/1261 [10:42<28:54,  1.89s/it]
37 50
 27%|██▋       | 343/1261 [10:44<28:54,  1.89s/it]
37 50
 27%|██▋       | 344/1261 [10:46<28:43,  1.88s/it]
37 50
 27%|██▋       | 345/1261 [10:48<29:27,  1.93s/it]
37 50
 27%|██▋       | 346/1261 [10:50<30:37,  2.01s/it]
37 50
 28%|██▊       | 347/1261 [10:52<30:19,  1.99s/it]
12 50
 28%|██▊       | 354/1261 [11:05<29:01,  1.92s/it]
9 2
 29%|██▉       | 370/1261 [11:36<29:15,  1.97s/it]
5 5
 30%|██▉       | 372/1261 [11:39<28:01,  1.89s/it]
23 71
 30%|██▉       | 373/1261 [11:41<27:39,  1.87s/it]
23 71
 30%|██▉       | 374/1261 [11:43<27:25,  1.86s/it]
23 71
 30%|██▉       | 375/1261 [11:45<27:06,  1.84s/it]
23 71
 30%|██▉       | 376/1261 [11:47<26:55,  1.83s/it]
23 71
 30%|██▉       | 377/1261 [11:48<26:41,  1.81s/it]
23 71
 30%|██▉       | 378/1261 [11:50<26:36,  1.81s/it]
23 71
 30%|███       | 379/1261 [11:52<26:38,  1.81s/it]
10 44
 32%|███▏      | 403/1261 [12:35<25:39,  1.79s/it]
4 12
 32%|███▏      | 404/1261 [12:37<25:33,  1.79s/it]
4 12
 32%|███▏      | 406/1261 [12:40<25:31,  1.79s/it]
7 11
 33%|███▎      | 414/1261 [12:55<26:42,  1.89s/it]
6 24
 33%|███▎      | 415/1261 [12:57<27:20,  1.94s/it]
6 24
 33%|███▎      | 416/1261 [12:59<27:51,  1.98s/it]
6 24
 33%|███▎      | 417/1261 [13:02<28:56,  2.06s/it]
6 24
 33%|███▎      | 418/1261 [13:04<30:02,  2.14s/it]
6 24
 33%|███▎      | 419/1261 [13:06<29:30,  2.10s/it]
6 24
 33%|███▎      | 420/1261 [13:08<28:31,  2.03s/it]
6 24
 33%|███▎      | 421/1261 [13:10<28:07,  2.01s/it]
6 24
 33%|███▎      | 422/1261 [13:12<27:42,  1.98s/it]
6 24
 34%|███▎      | 423/1261 [13:14<27:50,  1.99s/it]
6 24
 34%|███▎      | 424/1261 [13:16<28:09,  2.02s/it]
6 24
 34%|███▎      | 425/1261 [13:18<27:46,  1.99s/it]
6 50
6 24
 34%|███▍      | 426/1261 [13:20<27:39,  1.99s/it]
6 50
6 24
 34%|███▍      | 427/1261 [13:21<27:06,  1.95s/it]
6 50
6 24
 34%|███▍      | 428/1261 [13:23<26:35,  1.92s/it]
6 50
6 24
 34%|███▍      | 429/1261 [13:25<26:23,  1.90s/it]
6 50
6 24
 34%|███▍      | 430/1261 [13:27<26:19,  1.90s/it]
6 50
6 24
7 12
 34%|███▍      | 431/1261 [13:29<26:14,  1.90s/it]
6 50
6 24
 34%|███▍      | 432/1261 [13:31<26:03,  1.89s/it]
6 50
6 24
 34%|███▍      | 433/1261 [13:33<26:02,  1.89s/it]
6 50
6 24
 34%|███▍      | 434/1261 [13:35<26:07,  1.90s/it]
6 50
6 24
 34%|███▍      | 435/1261 [13:37<26:10,  1.90s/it]
6 50
6 24
 35%|███▍      | 436/1261 [13:38<26:09,  1.90s/it]
6 50
6 24
 35%|███▍      | 437/1261 [13:40<25:56,  1.89s/it]
6 50
6 24
 35%|███▍      | 438/1261 [13:42<25:56,  1.89s/it]
6 24
 35%|███▍      | 439/1261 [13:44<25:59,  1.90s/it]
6 24
 35%|███▍      | 440/1261 [13:46<25:50,  1.89s/it]
6 24
 35%|███▍      | 441/1261 [13:48<25:49,  1.89s/it]
6 24
 35%|███▌      | 442/1261 [13:50<25:39,  1.88s/it]
6 24
 35%|███▌      | 443/1261 [13:52<25:25,  1.86s/it]
6 24
 35%|███▌      | 444/1261 [13:53<25:25,  1.87s/it]
6 24
 35%|███▌      | 445/1261 [13:55<25:30,  1.88s/it]
6 24
 35%|███▌      | 446/1261 [13:57<25:23,  1.87s/it]
6 24
 35%|███▌      | 447/1261 [13:59<25:10,  1.86s/it]
6 24
 36%|███▌      | 448/1261 [14:01<25:07,  1.85s/it]
6 24
 36%|███▌      | 449/1261 [14:03<25:09,  1.86s/it]
6 24
 36%|███▌      | 450/1261 [14:05<25:07,  1.86s/it]
6 24
 36%|███▌      | 451/1261 [14:06<24:56,  1.85s/it]
6 24
 36%|███▌      | 452/1261 [14:08<24:48,  1.84s/it]
6 24
 36%|███▌      | 453/1261 [14:10<25:02,  1.86s/it]
6 24
 36%|███▌      | 454/1261 [14:12<24:58,  1.86s/it]
6 24
 36%|███▌      | 455/1261 [14:14<24:51,  1.85s/it]
11 11
6 24
 36%|███▌      | 456/1261 [14:16<25:02,  1.87s/it]
6 24
 36%|███▌      | 457/1261 [14:18<25:03,  1.87s/it]
6 24
 36%|███▋      | 458/1261 [14:20<25:10,  1.88s/it]
6 24
 36%|███▋      | 459/1261 [14:21<25:12,  1.89s/it]
6 24
 36%|███▋      | 460/1261 [14:23<24:51,  1.86s/it]
6 24
 37%|███▋      | 461/1261 [14:25<24:32,  1.84s/it]
6 24
 37%|███▋      | 462/1261 [14:27<24:29,  1.84s/it]
6 24
 37%|███▋      | 463/1261 [14:29<24:20,  1.83s/it]
6 24
 37%|███▋      | 464/1261 [14:30<24:15,  1.83s/it]
6 24
 37%|███▋      | 465/1261 [14:32<24:07,  1.82s/it]
6 24
 37%|███▋      | 466/1261 [14:34<24:18,  1.83s/it]
6 24
 37%|███▋      | 467/1261 [14:36<24:13,  1.83s/it]
6 24
 37%|███▋      | 468/1261 [14:38<24:06,  1.82s/it]
6 24
 42%|████▏     | 525/1261 [16:24<23:03,  1.88s/it]
31 37
 42%|████▏     | 526/1261 [16:26<22:57,  1.87s/it]
31 37
 42%|████▏     | 527/1261 [16:28<22:39,  1.85s/it]
31 37
 42%|████▏     | 528/1261 [16:30<22:28,  1.84s/it]
31 37
 42%|████▏     | 529/1261 [16:31<22:18,  1.83s/it]
31 37
 42%|████▏     | 530/1261 [16:33<22:13,  1.82s/it]
31 37
 44%|████▍     | 552/1261 [17:16<23:00,  1.95s/it]
11 12
 44%|████▍     | 553/1261 [17:17<22:42,  1.92s/it]
11 12
 44%|████▍     | 554/1261 [17:19<22:32,  1.91s/it]
11 12
31 37
 44%|████▍     | 555/1261 [17:21<22:34,  1.92s/it]
11 12
31 37
 44%|████▍     | 556/1261 [17:23<22:42,  1.93s/it]
11 12
31 37
 44%|████▍     | 557/1261 [17:25<22:54,  1.95s/it]
11 12
31 37
 44%|████▍     | 558/1261 [17:27<22:37,  1.93s/it]
11 12
31 37
 44%|████▍     | 559/1261 [17:29<22:09,  1.89s/it]
11 12
31 37
 44%|████▍     | 560/1261 [17:31<21:48,  1.87s/it]
31 37
 44%|████▍     | 561/1261 [17:33<21:43,  1.86s/it]
31 37
 45%|████▍     | 562/1261 [17:34<21:36,  1.85s/it]
31 37
 45%|████▍     | 564/1261 [17:38<21:17,  1.83s/it]
31 37
 45%|████▍     | 565/1261 [17:40<21:19,  1.84s/it]
31 37
 45%|████▍     | 566/1261 [17:42<21:15,  1.83s/it]
31 37
 46%|████▌     | 582/1261 [18:11<20:38,  1.82s/it]
12 38
11 50
 46%|████▌     | 583/1261 [18:13<20:36,  1.82s/it]
12 38
11 12
11 50
 46%|████▋     | 584/1261 [18:15<20:43,  1.84s/it]
12 38
11 12
11 50
 46%|████▋     | 585/1261 [18:17<20:38,  1.83s/it]
12 38
11 50
 46%|████▋     | 586/1261 [18:19<20:37,  1.83s/it]
12 38
11 50
 47%|████▋     | 587/1261 [18:20<20:41,  1.84s/it]
11 50
 47%|████▋     | 588/1261 [18:22<20:43,  1.85s/it]
11 50
 47%|████▋     | 589/1261 [18:24<20:38,  1.84s/it]
11 50
 47%|████▋     | 590/1261 [18:26<20:41,  1.85s/it]
11 50
 47%|████▋     | 591/1261 [18:28<20:35,  1.84s/it]
11 50
 47%|████▋     | 592/1261 [18:30<20:37,  1.85s/it]
11 50
 47%|████▋     | 593/1261 [18:32<20:36,  1.85s/it]
11 50
 47%|████▋     | 594/1261 [18:33<20:35,  1.85s/it]
11 50
 47%|████▋     | 595/1261 [18:35<20:37,  1.86s/it]
11 50
 47%|████▋     | 596/1261 [18:37<20:43,  1.87s/it]
11 50
 47%|████▋     | 597/1261 [18:39<20:53,  1.89s/it]
11 50
 47%|████▋     | 598/1261 [18:41<20:50,  1.89s/it]
11 50
 48%|████▊     | 599/1261 [18:43<20:41,  1.88s/it]
46 26
11 50
12 11
12 12
 48%|████▊     | 600/1261 [18:45<20:36,  1.87s/it]
21 26
11 50
 48%|████▊     | 601/1261 [18:46<20:25,  1.86s/it]
11 31
 48%|████▊     | 604/1261 [18:52<20:11,  1.84s/it]
11 12
 48%|████▊     | 605/1261 [18:54<20:03,  1.83s/it]
11 12
 48%|████▊     | 606/1261 [18:56<20:04,  1.84s/it]
12 38
11 12
 48%|████▊     | 607/1261 [18:57<20:00,  1.84s/it]
12 38
11 12
 48%|████▊     | 608/1261 [18:59<19:56,  1.83s/it]
12 38
50 50
11 12
 48%|████▊     | 609/1261 [19:01<19:55,  1.83s/it]
12 38
37 50
6 24
 48%|████▊     | 610/1261 [19:03<19:56,  1.84s/it]
12 38
37 50
6 24
 48%|████▊     | 611/1261 [19:05<19:54,  1.84s/it]
0 38
37 50
6 12
 49%|████▊     | 612/1261 [19:07<19:52,  1.84s/it]
0 38
25 50
11 12
 49%|████▊     | 613/1261 [19:08<19:47,  1.83s/it]
25 50
11 12
0 37
 49%|████▊     | 614/1261 [19:10<19:43,  1.83s/it]
25 50
11 12
0 37
 49%|████▉     | 615/1261 [19:12<19:39,  1.83s/it]
25 50
11 12
0 37
 49%|████▉     | 616/1261 [19:14<19:58,  1.86s/it]
25 50
11 12
0 37
 49%|████▉     | 617/1261 [19:16<20:09,  1.88s/it]
25 50
11 12
0 37
 49%|████▉     | 618/1261 [19:18<20:05,  1.87s/it]
25 50
11 12
0 37
 49%|████▉     | 619/1261 [19:20<19:51,  1.86s/it]
25 50
11 12
0 37
 49%|████▉     | 620/1261 [19:21<19:39,  1.84s/it]
25 50
11 12
0 37
 49%|████▉     | 621/1261 [19:23<19:32,  1.83s/it]
25 50
11 12
0 37
 49%|████▉     | 622/1261 [19:25<19:33,  1.84s/it]
38 50
11 12
0 37
 49%|████▉     | 623/1261 [19:27<19:27,  1.83s/it]
38 50
11 12
0 37
 49%|████▉     | 624/1261 [19:29<19:23,  1.83s/it]
38 50
11 12
0 37
 50%|████▉     | 625/1261 [19:31<19:21,  1.83s/it]
38 50
11 12
0 37
 50%|████▉     | 626/1261 [19:32<19:16,  1.82s/it]
38 50
11 12
0 37
 50%|████▉     | 627/1261 [19:34<19:08,  1.81s/it]
38 50
11 12
0 37
 50%|████▉     | 628/1261 [19:36<19:06,  1.81s/it]
38 50
11 12
 50%|████▉     | 629/1261 [19:38<19:02,  1.81s/it]
38 50
11 12
 50%|████▉     | 630/1261 [19:40<18:58,  1.80s/it]
38 50
11 12
 50%|█████     | 631/1261 [19:41<18:51,  1.80s/it]
38 50
11 12
 50%|█████     | 632/1261 [19:43<18:51,  1.80s/it]
38 50
11 12
 50%|█████     | 633/1261 [19:45<18:49,  1.80s/it]
38 50
11 12
 50%|█████     | 634/1261 [19:47<18:47,  1.80s/it]
38 50
11 12
 50%|█████     | 635/1261 [19:49<18:46,  1.80s/it]
38 50
11 12
 50%|█████     | 636/1261 [19:50<18:43,  1.80s/it]
14 37
11 12
12 37
 51%|█████     | 637/1261 [19:52<18:49,  1.81s/it]
14 37
11 12
12 37
 51%|█████     | 638/1261 [19:54<19:01,  1.83s/it]
14 37
12 37
 51%|█████     | 639/1261 [19:56<18:51,  1.82s/it]
14 37
12 37
 51%|█████     | 640/1261 [19:58<18:46,  1.81s/it]
14 37
12 37
 51%|█████     | 641/1261 [19:59<18:37,  1.80s/it]
14 37
12 37
 51%|█████     | 642/1261 [20:01<18:34,  1.80s/it]
14 37
12 37
 51%|█████     | 643/1261 [20:03<18:31,  1.80s/it]
14 37
12 37
 51%|█████     | 644/1261 [20:05<18:27,  1.79s/it]
14 37
12 37
 53%|█████▎    | 665/1261 [20:43<18:05,  1.82s/it]
50 50
11 37
 53%|█████▎    | 666/1261 [20:45<19:19,  1.95s/it]
50 50
11 37
 53%|█████▎    | 667/1261 [20:47<20:05,  2.03s/it]
39 50
11 37
 53%|█████▎    | 668/1261 [20:49<20:03,  2.03s/it]
39 50
11 37
 53%|█████▎    | 669/1261 [20:51<20:06,  2.04s/it]
39 50
11 37
 53%|█████▎    | 670/1261 [20:53<20:22,  2.07s/it]
39 50
11 37
 53%|█████▎    | 671/1261 [20:55<19:51,  2.02s/it]
39 50
11 37
 53%|█████▎    | 672/1261 [20:57<20:31,  2.09s/it]
39 50
11 37
 53%|█████▎    | 673/1261 [20:59<19:52,  2.03s/it]
39 50
11 37
 53%|█████▎    | 674/1261 [21:01<19:21,  1.98s/it]
39 50
11 37
 54%|█████▎    | 675/1261 [21:03<18:55,  1.94s/it]
39 50
11 37
 54%|█████▎    | 676/1261 [21:05<18:40,  1.92s/it]
39 50
11 37
 54%|█████▎    | 677/1261 [21:07<18:30,  1.90s/it]
39 50
11 37
 54%|█████▍    | 678/1261 [21:09<18:24,  1.90s/it]
39 50
11 37
 54%|█████▍    | 679/1261 [21:10<18:18,  1.89s/it]
39 50
11 37
 54%|█████▍    | 680/1261 [21:12<18:16,  1.89s/it]
39 50
 54%|█████▍    | 681/1261 [21:15<19:36,  2.03s/it]
39 50
 54%|█████▍    | 682/1261 [21:17<19:37,  2.03s/it]
39 50
 54%|█████▍    | 683/1261 [21:19<19:33,  2.03s/it]
39 50
 54%|█████▍    | 684/1261 [21:21<19:27,  2.02s/it]
39 50
 54%|█████▍    | 685/1261 [21:23<19:45,  2.06s/it]
37 50
 54%|█████▍    | 686/1261 [21:25<20:20,  2.12s/it]
37 50
 54%|█████▍    | 687/1261 [21:27<20:26,  2.14s/it]
37 50
 55%|█████▍    | 688/1261 [21:30<20:27,  2.14s/it]
37 50
 55%|█████▍    | 689/1261 [21:32<20:21,  2.14s/it]
37 50
37 37
 55%|█████▍    | 690/1261 [21:34<20:29,  2.15s/it]
37 50
37 37
 55%|█████▍    | 691/1261 [21:36<19:57,  2.10s/it]
37 50
37 37
 55%|█████▍    | 692/1261 [21:38<19:31,  2.06s/it]
37 50
 55%|█████▍    | 693/1261 [21:40<19:08,  2.02s/it]
37 50
 55%|█████▌    | 694/1261 [21:42<18:38,  1.97s/it]
37 50
 55%|█████▌    | 695/1261 [21:44<18:39,  1.98s/it]
37 50
 55%|█████▌    | 696/1261 [21:46<18:36,  1.98s/it]
37 50
 55%|█████▌    | 697/1261 [21:47<18:28,  1.96s/it]
37 50
 55%|█████▌    | 698/1261 [21:49<18:08,  1.93s/it]
37 50
 55%|█████▌    | 699/1261 [21:51<18:28,  1.97s/it]
37 50
 56%|█████▌    | 700/1261 [21:53<18:04,  1.93s/it]
37 50
 56%|█████▌    | 701/1261 [21:55<17:45,  1.90s/it]
37 50
 56%|█████▌    | 702/1261 [21:57<17:28,  1.88s/it]
37 50
 56%|█████▌    | 703/1261 [21:59<17:15,  1.86s/it]
37 38
 56%|█████▌    | 704/1261 [22:00<17:04,  1.84s/it]
37 38
 56%|█████▌    | 705/1261 [22:02<17:02,  1.84s/it]
37 38
31 23
 56%|█████▌    | 706/1261 [22:04<17:18,  1.87s/it]
37 38
31 23
 56%|█████▌    | 707/1261 [22:06<17:28,  1.89s/it]
37 38
 56%|█████▌    | 708/1261 [22:08<18:18,  1.99s/it]
37 38
 56%|█████▌    | 709/1261 [22:11<19:16,  2.10s/it]
37 38
 56%|█████▋    | 710/1261 [22:13<19:15,  2.10s/it]
37 38
 56%|█████▋    | 711/1261 [22:15<19:14,  2.10s/it]
37 38
 56%|█████▋    | 712/1261 [22:17<19:43,  2.16s/it]
37 38
 57%|█████▋    | 713/1261 [22:19<19:47,  2.17s/it]
37 38
 57%|█████▋    | 714/1261 [22:22<19:39,  2.16s/it]
37 38
 57%|█████▋    | 715/1261 [22:24<19:07,  2.10s/it]
37 38
 57%|█████▋    | 716/1261 [22:25<18:20,  2.02s/it]
37 38
 57%|█████▋    | 717/1261 [22:27<17:46,  1.96s/it]
37 38
 57%|█████▋    | 718/1261 [22:29<17:19,  1.91s/it]
37 38
 57%|█████▋    | 719/1261 [22:31<17:05,  1.89s/it]
37 38
 57%|█████▋    | 720/1261 [22:33<17:23,  1.93s/it]
37 38
 57%|█████▋    | 721/1261 [22:35<17:48,  1.98s/it]
37 38
 57%|█████▋    | 722/1261 [22:37<17:30,  1.95s/it]
37 38
 57%|█████▋    | 723/1261 [22:39<17:04,  1.90s/it]
37 38
 57%|█████▋    | 724/1261 [22:40<16:47,  1.88s/it]
37 38
 57%|█████▋    | 725/1261 [22:42<16:37,  1.86s/it]
37 38
 58%|█████▊    | 726/1261 [22:44<16:42,  1.87s/it]
37 38
 58%|█████▊    | 727/1261 [22:46<16:33,  1.86s/it]
37 38
 58%|█████▊    | 728/1261 [22:48<16:24,  1.85s/it]
37 38
 58%|█████▊    | 729/1261 [22:50<16:20,  1.84s/it]
37 38
 58%|█████▊    | 730/1261 [22:51<16:15,  1.84s/it]
37 38
 58%|█████▊    | 731/1261 [22:54<16:43,  1.89s/it]
37 38
 58%|█████▊    | 732/1261 [22:55<16:47,  1.90s/it]
37 25
 58%|█████▊    | 733/1261 [22:57<16:31,  1.88s/it]
37 25
 58%|█████▊    | 734/1261 [22:59<16:19,  1.86s/it]
37 25
6 18
 58%|█████▊    | 735/1261 [23:01<16:08,  1.84s/it]
37 25
 58%|█████▊    | 736/1261 [23:03<16:19,  1.87s/it]
37 25
 58%|█████▊    | 737/1261 [23:05<16:14,  1.86s/it]
37 25
 59%|█████▊    | 738/1261 [23:06<16:07,  1.85s/it]
37 25
 59%|█████▊    | 739/1261 [23:08<15:59,  1.84s/it]
50 38
 59%|█████▊    | 740/1261 [23:10<15:50,  1.82s/it]
50 50
 59%|█████▉    | 741/1261 [23:12<15:59,  1.84s/it]
50 50
 59%|█████▉    | 742/1261 [23:14<16:00,  1.85s/it]
50 50
 59%|█████▉    | 743/1261 [23:16<15:53,  1.84s/it]
50 50
 59%|█████▉    | 744/1261 [23:18<16:02,  1.86s/it]
50 50
 59%|█████▉    | 745/1261 [23:19<16:03,  1.87s/it]
50 50
 59%|█████▉    | 746/1261 [23:21<16:19,  1.90s/it]
50 50
 59%|█████▉    | 747/1261 [23:23<16:17,  1.90s/it]
50 50
 59%|█████▉    | 748/1261 [23:25<16:22,  1.91s/it]
50 50
10 11
 59%|█████▉    | 749/1261 [23:27<16:25,  1.92s/it]
50 50
10 11
 59%|█████▉    | 750/1261 [23:29<16:14,  1.91s/it]
50 50
10 11
 60%|█████▉    | 751/1261 [23:31<16:13,  1.91s/it]
50 50
 60%|█████▉    | 752/1261 [23:33<16:14,  1.91s/it]
50 50
 60%|█████▉    | 753/1261 [23:35<16:00,  1.89s/it]
50 50
 60%|█████▉    | 754/1261 [23:37<15:52,  1.88s/it]
50 50
 60%|█████▉    | 755/1261 [23:38<15:50,  1.88s/it]
50 50
 60%|█████▉    | 756/1261 [23:40<15:40,  1.86s/it]
50 50
 60%|██████    | 757/1261 [23:42<15:32,  1.85s/it]
50 50
 60%|██████    | 758/1261 [23:44<15:37,  1.86s/it]
50 50
 60%|██████    | 759/1261 [23:46<15:37,  1.87s/it]
50 50
 60%|██████    | 760/1261 [23:48<15:27,  1.85s/it]
50 50
 60%|██████    | 761/1261 [23:50<15:22,  1.84s/it]
50 50
 60%|██████    | 762/1261 [23:51<15:23,  1.85s/it]
50 50
 61%|██████    | 763/1261 [23:53<15:24,  1.86s/it]
24 10
31 23
 61%|██████    | 764/1261 [23:55<15:23,  1.86s/it]
14 10
6 10
 61%|██████    | 765/1261 [23:57<15:19,  1.85s/it]
11 0
 61%|██████    | 766/1261 [23:59<15:19,  1.86s/it]
11 0
 61%|██████    | 767/1261 [24:01<15:19,  1.86s/it]
50 50
 61%|██████    | 768/1261 [24:03<15:17,  1.86s/it]
50 50
6 16
 61%|██████    | 769/1261 [24:04<15:13,  1.86s/it]
50 50
19 5
 61%|██████    | 770/1261 [24:06<15:09,  1.85s/it]
50 50
 61%|██████    | 771/1261 [24:08<15:06,  1.85s/it]
50 50
 61%|██████    | 772/1261 [24:10<15:06,  1.85s/it]
25 38
 61%|██████▏   | 773/1261 [24:12<15:02,  1.85s/it]
25 38
 61%|██████▏   | 774/1261 [24:14<15:08,  1.86s/it]
25 38
 61%|██████▏   | 775/1261 [24:16<15:11,  1.88s/it]
25 38
 62%|██████▏   | 776/1261 [24:18<15:20,  1.90s/it]
25 38
 62%|██████▏   | 777/1261 [24:19<15:21,  1.90s/it]
25 38
 62%|██████▏   | 778/1261 [24:21<15:22,  1.91s/it]
25 38
 62%|██████▏   | 779/1261 [24:23<15:15,  1.90s/it]
25 38
 62%|██████▏   | 780/1261 [24:25<15:04,  1.88s/it]
25 38
 62%|██████▏   | 781/1261 [24:27<14:57,  1.87s/it]
25 38
 62%|██████▏   | 782/1261 [24:29<14:50,  1.86s/it]
12 38
38 50
11 12
 62%|██████▏   | 783/1261 [24:31<14:45,  1.85s/it]
12 38
38 50
11 12
 62%|██████▏   | 784/1261 [24:32<14:40,  1.85s/it]
12 38
38 50
11 12
 62%|██████▏   | 785/1261 [24:34<14:46,  1.86s/it]
38 50
11 12
 62%|██████▏   | 786/1261 [24:36<14:45,  1.86s/it]
38 50
11 12
 62%|██████▏   | 787/1261 [24:38<14:38,  1.85s/it]
38 50
 62%|██████▏   | 788/1261 [24:40<14:31,  1.84s/it]
38 50
 63%|██████▎   | 790/1261 [24:44<14:25,  1.84s/it]
12 38
 63%|██████▎   | 791/1261 [24:45<14:20,  1.83s/it]
12 38
 63%|██████▎   | 792/1261 [24:47<14:29,  1.85s/it]
12 38
6 32
 63%|██████▎   | 793/1261 [24:49<14:27,  1.85s/it]
12 38
 63%|██████▎   | 794/1261 [24:51<14:31,  1.87s/it]
12 38
 63%|██████▎   | 795/1261 [24:53<14:48,  1.91s/it]
50 38
12 38
 63%|██████▎   | 796/1261 [24:55<14:36,  1.89s/it]
50 38
12 38
 63%|██████▎   | 797/1261 [24:57<14:26,  1.87s/it]
50 38
12 38
 63%|██████▎   | 798/1261 [24:58<14:17,  1.85s/it]
50 38
12 38
 63%|██████▎   | 799/1261 [25:00<14:06,  1.83s/it]
50 38
12 38
 63%|██████▎   | 800/1261 [25:02<14:02,  1.83s/it]
50 38
12 38
 64%|██████▎   | 801/1261 [25:04<13:59,  1.83s/it]
50 38
12 38
12 6
 64%|██████▎   | 802/1261 [25:06<13:56,  1.82s/it]
50 38
12 38
 64%|██████▎   | 803/1261 [25:08<13:50,  1.81s/it]
50 38
 64%|██████▍   | 804/1261 [25:09<13:50,  1.82s/it]
37 38
 64%|██████▍   | 805/1261 [25:11<13:49,  1.82s/it]
37 38
 64%|██████▍   | 806/1261 [25:13<13:55,  1.84s/it]
37 38
 64%|██████▍   | 807/1261 [25:15<13:52,  1.83s/it]
24 38
 64%|██████▍   | 808/1261 [25:17<13:48,  1.83s/it]
12 38
 64%|██████▍   | 809/1261 [25:19<13:45,  1.83s/it]
12 38
 64%|██████▍   | 812/1261 [25:24<13:38,  1.82s/it]
1 4
 65%|██████▍   | 817/1261 [25:33<13:26,  1.82s/it]
6 9
 65%|██████▌   | 825/1261 [25:48<13:45,  1.89s/it]
3 29
 67%|██████▋   | 840/1261 [26:16<13:03,  1.86s/it]
7 15
 67%|██████▋   | 841/1261 [26:18<12:58,  1.85s/it]
7 15
 67%|██████▋   | 842/1261 [26:20<12:53,  1.85s/it]
7 15
 67%|██████▋   | 851/1261 [26:36<12:26,  1.82s/it]
6 37
 68%|██████▊   | 852/1261 [26:38<12:24,  1.82s/it]
6 37
 68%|██████▊   | 853/1261 [26:40<12:23,  1.82s/it]
6 37
 68%|██████▊   | 854/1261 [26:42<12:21,  1.82s/it]
6 37
 68%|██████▊   | 855/1261 [26:43<12:17,  1.82s/it]
6 37
 68%|██████▊   | 856/1261 [26:45<12:17,  1.82s/it]
6 37
 68%|██████▊   | 857/1261 [26:47<12:14,  1.82s/it]
6 37
 68%|██████▊   | 858/1261 [26:49<12:12,  1.82s/it]
6 11
 68%|██████▊   | 859/1261 [26:51<12:08,  1.81s/it]
6 11
 68%|██████▊   | 860/1261 [26:53<12:13,  1.83s/it]
6 11
 68%|██████▊   | 861/1261 [26:54<12:17,  1.84s/it]
6 11
 68%|██████▊   | 862/1261 [26:56<12:14,  1.84s/it]
6 11
 68%|██████▊   | 863/1261 [26:58<12:10,  1.84s/it]
6 11
 69%|██████▊   | 864/1261 [27:00<12:10,  1.84s/it]
6 11
 69%|██████▊   | 865/1261 [27:02<12:21,  1.87s/it]
6 11
 69%|██████▊   | 866/1261 [27:04<12:24,  1.88s/it]
6 11
 69%|██████▉   | 867/1261 [27:06<12:14,  1.86s/it]
6 11
 69%|██████▉   | 868/1261 [27:07<12:09,  1.86s/it]
6 11
 69%|██████▉   | 869/1261 [27:09<12:10,  1.86s/it]
6 11
 69%|██████▉   | 870/1261 [27:11<12:04,  1.85s/it]
6 11
 69%|██████▉   | 871/1261 [27:13<12:06,  1.86s/it]
6 11
 69%|██████▉   | 872/1261 [27:15<12:01,  1.85s/it]
6 11
 69%|██████▉   | 873/1261 [27:17<12:06,  1.87s/it]
6 11
 69%|██████▉   | 874/1261 [27:19<12:01,  1.87s/it]
6 11
 69%|██████▉   | 875/1261 [27:21<12:00,  1.87s/it]
6 11
 69%|██████▉   | 876/1261 [27:22<12:04,  1.88s/it]
6 11
 70%|██████▉   | 877/1261 [27:24<12:01,  1.88s/it]
6 11
 70%|██████▉   | 878/1261 [27:26<12:00,  1.88s/it]
6 11
 70%|██████▉   | 879/1261 [27:28<11:58,  1.88s/it]
6 11
7 0
 70%|██████▉   | 880/1261 [27:30<11:57,  1.88s/it]
6 11
7 0
 70%|██████▉   | 881/1261 [27:32<11:54,  1.88s/it]
6 11
7 0
 70%|██████▉   | 882/1261 [27:34<11:51,  1.88s/it]
6 11
7 0
 70%|███████   | 883/1261 [27:36<12:03,  1.91s/it]
6 11
 70%|███████   | 884/1261 [27:38<12:02,  1.92s/it]
6 11
 70%|███████   | 885/1261 [27:40<11:59,  1.91s/it]
6 11
6 4
 70%|███████   | 886/1261 [27:41<11:49,  1.89s/it]
6 11
6 4
 70%|███████   | 887/1261 [27:43<11:38,  1.87s/it]
6 11
6 4
 70%|███████   | 888/1261 [27:45<11:30,  1.85s/it]
6 11
6 4
 70%|███████   | 889/1261 [27:47<11:23,  1.84s/it]
6 11
6 4
 71%|███████   | 890/1261 [27:49<11:18,  1.83s/it]
6 11
6 4
 71%|███████   | 891/1261 [27:50<11:16,  1.83s/it]
6 11
6 4
 71%|███████   | 892/1261 [27:52<11:18,  1.84s/it]
6 4
 71%|███████   | 893/1261 [27:54<11:23,  1.86s/it]
6 4
 71%|███████   | 894/1261 [27:56<11:22,  1.86s/it]
6 4
 71%|███████   | 895/1261 [27:58<11:22,  1.87s/it]
6 4
 71%|███████   | 896/1261 [28:00<11:14,  1.85s/it]
6 4
 71%|███████   | 897/1261 [28:02<11:13,  1.85s/it]
6 4
 71%|███████   | 898/1261 [28:04<11:12,  1.85s/it]
6 4
 71%|███████▏  | 899/1261 [28:05<11:07,  1.84s/it]
6 4
 71%|███████▏  | 900/1261 [28:07<11:07,  1.85s/it]
6 4
 71%|███████▏  | 901/1261 [28:09<11:05,  1.85s/it]
6 4
 72%|███████▏  | 912/1261 [28:30<10:46,  1.85s/it]
24 25
 72%|███████▏  | 913/1261 [28:31<10:47,  1.86s/it]
24 25
 72%|███████▏  | 914/1261 [28:33<10:38,  1.84s/it]
24 25
 73%|███████▎  | 915/1261 [28:35<10:38,  1.85s/it]
24 25
 73%|███████▎  | 916/1261 [28:37<10:36,  1.85s/it]
24 25
 73%|███████▎  | 917/1261 [28:39<10:36,  1.85s/it]
24 25
 73%|███████▎  | 918/1261 [28:41<10:40,  1.87s/it]
24 25
 74%|███████▍  | 931/1261 [29:05<10:35,  1.93s/it]
22 23
 74%|███████▍  | 932/1261 [29:07<10:29,  1.91s/it]
22 23
 74%|███████▍  | 933/1261 [29:09<10:24,  1.90s/it]
22 23
 74%|███████▍  | 934/1261 [29:11<10:17,  1.89s/it]
11 11
1 37
10 5
 74%|███████▍  | 935/1261 [29:13<10:12,  1.88s/it]
10 5
 74%|███████▍  | 936/1261 [29:15<10:17,  1.90s/it]
10 5
 74%|███████▍  | 937/1261 [29:17<10:13,  1.89s/it]
6 11
10 5
 74%|███████▍  | 938/1261 [29:19<10:07,  1.88s/it]
6 11
10 5
 74%|███████▍  | 939/1261 [29:20<10:01,  1.87s/it]
6 11
10 5
 75%|███████▍  | 940/1261 [29:22<10:07,  1.89s/it]
10 5
 75%|███████▍  | 941/1261 [29:24<10:08,  1.90s/it]
10 5
 75%|███████▍  | 942/1261 [29:26<10:06,  1.90s/it]
10 5
 75%|███████▍  | 943/1261 [29:28<10:07,  1.91s/it]
10 5
 75%|███████▍  | 944/1261 [29:30<10:00,  1.89s/it]
10 5
 75%|███████▍  | 945/1261 [29:32<09:59,  1.90s/it]
10 5
 75%|███████▌  | 946/1261 [29:34<09:57,  1.90s/it]
10 5
 75%|███████▌  | 947/1261 [29:36<09:53,  1.89s/it]
10 5
 77%|███████▋  | 972/1261 [30:24<09:24,  1.95s/it]
12 38
 77%|███████▋  | 973/1261 [30:26<09:17,  1.94s/it]
12 38
 77%|███████▋  | 974/1261 [30:28<09:19,  1.95s/it]
12 38
37 25
 77%|███████▋  | 975/1261 [30:30<09:33,  2.01s/it]
12 38
37 25
 77%|███████▋  | 976/1261 [30:32<09:31,  2.01s/it]
12 38
31 51
37 25
 77%|███████▋  | 977/1261 [30:34<09:21,  1.98s/it]
12 38
31 51
37 25
 78%|███████▊  | 978/1261 [30:36<09:43,  2.06s/it]
12 38
31 64
37 25
 78%|███████▊  | 979/1261 [30:38<10:03,  2.14s/it]
12 38
37 25
6 11
 78%|███████▊  | 980/1261 [30:40<09:45,  2.08s/it]
12 38
37 25
6 11
 78%|███████▊  | 981/1261 [30:43<09:47,  2.10s/it]
12 38
37 25
6 11
 78%|███████▊  | 982/1261 [30:45<09:55,  2.14s/it]
12 38
37 25
6 11
 78%|███████▊  | 983/1261 [30:47<09:45,  2.11s/it]
12 38
37 25
6 11
 78%|███████▊  | 984/1261 [30:49<09:28,  2.05s/it]
12 38
37 25
6 11
 78%|███████▊  | 985/1261 [30:51<09:16,  2.02s/it]
37 25
6 11
 78%|███████▊  | 986/1261 [30:53<09:13,  2.01s/it]
37 25
6 11
 78%|███████▊  | 987/1261 [30:55<09:06,  1.99s/it]
24 25
6 11
 78%|███████▊  | 988/1261 [30:57<08:57,  1.97s/it]
24 25
6 11
 78%|███████▊  | 989/1261 [30:58<08:46,  1.94s/it]
11 25
6 11
 79%|███████▊  | 990/1261 [31:00<08:39,  1.92s/it]
11 25
6 11
 79%|███████▊  | 991/1261 [31:02<08:32,  1.90s/it]
11 25
6 11
 79%|███████▊  | 992/1261 [31:04<08:26,  1.88s/it]
6 11
 79%|███████▊  | 993/1261 [31:06<08:22,  1.87s/it]
6 11
 79%|███████▉  | 994/1261 [31:08<08:16,  1.86s/it]
6 11
 79%|███████▉  | 995/1261 [31:10<08:48,  1.99s/it]
23 51
6 11
 79%|███████▉  | 996/1261 [31:12<09:00,  2.04s/it]
23 51
6 11
 79%|███████▉  | 997/1261 [31:14<08:46,  2.00s/it]
23 51
6 11
 79%|███████▉  | 998/1261 [31:16<08:34,  1.96s/it]
2 11
23 51
6 11
 79%|███████▉  | 999/1261 [31:18<08:24,  1.93s/it]
2 11
23 39
11 12
6 11
3 3
 79%|███████▉  | 1000/1261 [31:20<08:31,  1.96s/it]
2 11
23 7
11 12
6 11
 79%|███████▉  | 1001/1261 [31:22<08:20,  1.93s/it]
2 11
23 7
11 12
6 11
 79%|███████▉  | 1002/1261 [31:24<08:19,  1.93s/it]
2 11
6 6
11 12
6 11
 80%|███████▉  | 1003/1261 [31:25<08:14,  1.92s/it]
2 11
6 6
11 12
 80%|███████▉  | 1004/1261 [31:27<08:10,  1.91s/it]
2 11
18 12
6 6
11 12
 80%|███████▉  | 1005/1261 [31:30<08:45,  2.05s/it]
2 11
18 12
11 12
 80%|███████▉  | 1006/1261 [31:33<09:46,  2.30s/it]
2 11
18 12
11 12
 80%|███████▉  | 1007/1261 [31:35<09:32,  2.25s/it]
2 11
18 12
11 12
 80%|███████▉  | 1008/1261 [31:37<09:10,  2.18s/it]
7 11
2 11
18 12
16 26
11 12
 80%|████████  | 1009/1261 [31:39<08:49,  2.10s/it]
5 11
2 11
18 12
16 26
11 12
 80%|████████  | 1010/1261 [31:41<08:58,  2.14s/it]
2 11
12 11
16 26
11 12
 80%|████████  | 1011/1261 [31:43<08:39,  2.08s/it]
2 11
12 11
16 26
11 12
 80%|████████  | 1012/1261 [31:45<08:25,  2.03s/it]
2 11
16 26
11 12
 80%|████████  | 1013/1261 [31:47<08:22,  2.03s/it]
2 11
16 26
 80%|████████  | 1014/1261 [31:49<08:18,  2.02s/it]
2 11
6 11
16 26
 80%|████████  | 1015/1261 [31:51<08:10,  1.99s/it]
2 11
6 11
16 26
 81%|████████  | 1016/1261 [31:53<08:06,  1.99s/it]
2 11
6 11
16 26
 81%|████████  | 1017/1261 [31:55<07:59,  1.96s/it]
2 11
6 11
16 26
 81%|████████  | 1018/1261 [31:56<07:53,  1.95s/it]
2 11
25 38
6 11
16 26
6 37
11 12
 81%|████████  | 1019/1261 [31:58<07:51,  1.95s/it]
2 11
25 38
11 12
6 11
16 26
6 37
11 12
 81%|████████  | 1020/1261 [32:00<07:45,  1.93s/it]
25 38
11 12
6 11
16 26
6 37
 81%|████████  | 1021/1261 [32:02<07:43,  1.93s/it]
25 38
11 12
16 26
19 63
6 37
 81%|████████  | 1022/1261 [32:04<07:40,  1.93s/it]
25 38
11 11
16 13
19 63
6 37
 81%|████████  | 1023/1261 [32:06<07:34,  1.91s/it]
25 38
11 11
50 50
19 63
6 37
 81%|████████  | 1024/1261 [32:08<07:31,  1.91s/it]
25 38
19 63
37 37
6 37
 81%|████████▏ | 1025/1261 [32:10<07:28,  1.90s/it]
25 38
22 51
15 63
37 37
6 37
 81%|████████▏ | 1026/1261 [32:12<07:27,  1.90s/it]
25 38
22 51
15 63
6 37
37 24
3 12
 81%|████████▏ | 1027/1261 [32:14<07:22,  1.89s/it]
25 38
22 51
15 63
6 37
37 24
3 12
 82%|████████▏ | 1028/1261 [32:16<07:22,  1.90s/it]
25 38
22 51
15 63
6 37
37 24
 82%|████████▏ | 1029/1261 [32:17<07:18,  1.89s/it]
25 38
22 51
31 38
15 63
6 37
37 24
2 12
 82%|████████▏ | 1030/1261 [32:19<07:17,  1.90s/it]
12 38
22 51
31 38
15 63
23 63
6 37
50 37
2 11
 82%|████████▏ | 1031/1261 [32:21<07:10,  1.87s/it]
31 38
15 63
22 50
23 63
6 37
14 24
50 37
5 37
 82%|████████▏ | 1032/1261 [32:23<07:18,  1.91s/it]
31 38
15 63
22 50
23 63
6 37
11 24
50 37
5 37
 82%|████████▏ | 1033/1261 [32:25<07:22,  1.94s/it]
31 38
15 63
22 50
23 63
6 37
11 24
50 37
5 37
 82%|████████▏ | 1034/1261 [32:27<07:18,  1.93s/it]
31 38
15 63
22 50
23 63
6 37
11 24
50 37
5 37
 82%|████████▏ | 1035/1261 [32:29<07:17,  1.94s/it]
31 38
15 63
22 50
23 63
6 37
11 24
50 37
5 37
 82%|████████▏ | 1036/1261 [32:31<07:16,  1.94s/it]
31 38
15 63
22 50
23 63
6 37
11 24
5 37
12 12
6 12
 82%|████████▏ | 1037/1261 [32:33<07:12,  1.93s/it]
31 38
50 50
15 63
22 50
23 63
6 37
11 24
5 37
12 12
6 12
 82%|████████▏ | 1038/1261 [32:35<07:10,  1.93s/it]
31 38
15 63
22 50
11 24
12 12
6 12
24 4
 82%|████████▏ | 1039/1261 [32:37<07:24,  2.00s/it]
31 38
15 63
22 50
11 24
12 12
6 12
 82%|████████▏ | 1040/1261 [32:39<07:19,  1.99s/it]
31 38
15 63
22 50
11 24
12 12
6 12
 83%|████████▎ | 1041/1261 [32:41<07:06,  1.94s/it]
31 38
21 25
15 63
22 50
11 24
12 12
6 12
 83%|████████▎ | 1042/1261 [32:43<06:57,  1.91s/it]
31 38
21 25
15 63
22 50
11 24
12 12
6 12
 83%|████████▎ | 1043/1261 [32:44<06:50,  1.88s/it]
31 38
21 25
15 63
22 50
11 24
 83%|████████▎ | 1044/1261 [32:46<06:45,  1.87s/it]
31 38
21 25
15 63
22 50
11 24
 83%|████████▎ | 1045/1261 [32:48<06:41,  1.86s/it]
31 38
15 63
22 50
11 24
 83%|████████▎ | 1046/1261 [32:50<06:37,  1.85s/it]
31 51
15 63
22 50
11 24
 83%|████████▎ | 1047/1261 [32:52<06:35,  1.85s/it]
31 51
15 63
22 50
11 24
 83%|████████▎ | 1048/1261 [32:54<06:34,  1.85s/it]
31 51
15 63
22 50
 83%|████████▎ | 1049/1261 [32:55<06:31,  1.85s/it]
15 63
22 50
 83%|████████▎ | 1050/1261 [32:57<06:32,  1.86s/it]
15 63
22 50
 83%|████████▎ | 1051/1261 [32:59<06:39,  1.90s/it]
15 63
22 50
4 12
 83%|████████▎ | 1052/1261 [33:01<06:43,  1.93s/it]
6 37
15 63
22 50
 84%|████████▎ | 1053/1261 [33:03<06:39,  1.92s/it]
15 63
 84%|████████▎ | 1054/1261 [33:05<06:33,  1.90s/it]
18 50
15 63
 84%|████████▎ | 1055/1261 [33:07<06:36,  1.92s/it]
15 63
15 24
 84%|████████▎ | 1056/1261 [33:09<06:44,  1.97s/it]
15 63
 84%|████████▍ | 1057/1261 [33:11<06:38,  1.95s/it]
15 63
 84%|████████▍ | 1058/1261 [33:13<06:27,  1.91s/it]
15 63
 84%|████████▍ | 1059/1261 [33:15<06:21,  1.89s/it]
6 11
22 25
15 63
 84%|████████▍ | 1060/1261 [33:17<06:14,  1.86s/it]
6 11
22 25
15 63
 84%|████████▍ | 1061/1261 [33:18<06:09,  1.85s/it]
21 25
22 25
15 63
23 6
 84%|████████▍ | 1062/1261 [33:20<06:03,  1.83s/it]
6 11
21 25
22 25
15 63
 84%|████████▍ | 1063/1261 [33:22<06:03,  1.84s/it]
21 25
22 25
15 63
 84%|████████▍ | 1064/1261 [33:24<06:00,  1.83s/it]
21 25
22 25
15 63
 84%|████████▍ | 1065/1261 [33:26<05:57,  1.82s/it]
21 25
22 25
15 63
 85%|████████▍ | 1066/1261 [33:27<05:54,  1.82s/it]
21 25
22 25
15 63
 85%|████████▍ | 1067/1261 [33:29<05:53,  1.82s/it]
21 25
22 25
15 63
 85%|████████▍ | 1068/1261 [33:31<05:52,  1.82s/it]
21 25
22 25
15 63
 85%|████████▍ | 1069/1261 [33:33<05:47,  1.81s/it]
21 25
22 12
15 63
 85%|████████▍ | 1070/1261 [33:35<05:46,  1.81s/it]
21 12
22 12
15 50
 85%|████████▍ | 1071/1261 [33:36<05:45,  1.82s/it]
21 12
22 12
22 50
15 50
 85%|████████▌ | 1072/1261 [33:38<05:44,  1.82s/it]
21 12
22 12
22 50
15 50
 85%|████████▌ | 1073/1261 [33:40<05:40,  1.81s/it]
6 11
21 12
10 12
22 50
8 37
 85%|████████▌ | 1074/1261 [33:42<05:40,  1.82s/it]
6 11
12 50
21 12
22 50
8 37
 85%|████████▌ | 1075/1261 [33:44<05:37,  1.82s/it]
1 0
12 50
21 12
22 50
 85%|████████▌ | 1076/1261 [33:46<05:35,  1.82s/it]
1 0
12 50
12 50
21 12
22 50
 85%|████████▌ | 1077/1261 [33:47<05:34,  1.82s/it]
1 0
12 50
12 50
21 12
22 50
 85%|████████▌ | 1078/1261 [33:49<05:33,  1.82s/it]
1 0
12 50
8 12
22 50
12 12
 86%|████████▌ | 1079/1261 [33:51<05:30,  1.82s/it]
1 0
8 12
22 50
12 24
12 12
 86%|████████▌ | 1080/1261 [33:53<05:33,  1.84s/it]
1 0
8 12
22 50
12 24
12 12
 86%|████████▌ | 1081/1261 [33:55<05:29,  1.83s/it]
1 0
8 12
22 50
12 24
12 12
 86%|████████▌ | 1082/1261 [33:57<05:27,  1.83s/it]
1 0
8 12
22 50
12 24
12 12
 86%|████████▌ | 1083/1261 [33:58<05:25,  1.83s/it]
1 0
8 12
22 50
12 24
12 12
 86%|████████▌ | 1084/1261 [34:00<05:22,  1.82s/it]
1 0
22 50
12 24
12 12
 86%|████████▌ | 1085/1261 [34:02<05:20,  1.82s/it]
1 0
22 50
12 24
12 12
 86%|████████▌ | 1086/1261 [34:04<05:18,  1.82s/it]
1 0
22 50
12 12
12 12
 86%|████████▌ | 1087/1261 [34:06<05:15,  1.81s/it]
1 0
22 50
12 12
 86%|████████▋ | 1088/1261 [34:07<05:13,  1.81s/it]
1 0
22 50
 86%|████████▋ | 1089/1261 [34:09<05:11,  1.81s/it]
1 0
22 50
 86%|████████▋ | 1090/1261 [34:11<05:09,  1.81s/it]
1 0
22 50
 87%|████████▋ | 1091/1261 [34:13<05:06,  1.81s/it]
1 0
22 50
 87%|████████▋ | 1092/1261 [34:15<05:04,  1.80s/it]
1 0
22 50
 87%|████████▋ | 1093/1261 [34:16<05:02,  1.80s/it]
22 50
 87%|████████▋ | 1094/1261 [34:18<05:01,  1.81s/it]
22 50
 87%|████████▋ | 1095/1261 [34:20<05:01,  1.81s/it]
11 50
 87%|████████▋ | 1096/1261 [34:22<05:01,  1.83s/it]
11 37
 87%|████████▋ | 1103/1261 [34:34<04:44,  1.80s/it]
38 37
 88%|████████▊ | 1104/1261 [34:36<04:43,  1.80s/it]
38 37
38 24
 88%|████████▊ | 1105/1261 [34:38<04:42,  1.81s/it]
38 37
38 24
 88%|████████▊ | 1106/1261 [34:40<04:41,  1.82s/it]
38 37
38 24
 88%|████████▊ | 1107/1261 [34:42<04:38,  1.81s/it]
38 37
38 24
 88%|████████▊ | 1108/1261 [34:44<04:36,  1.81s/it]
37 64
47 51
38 37
38 24
 88%|████████▊ | 1109/1261 [34:45<04:34,  1.80s/it]
37 64
47 51
38 37
38 24
 88%|████████▊ | 1110/1261 [34:47<04:32,  1.80s/it]
47 51
38 37
23 63
12 63
38 24
 88%|████████▊ | 1111/1261 [34:49<04:30,  1.80s/it]
47 51
38 37
23 63
38 24
12 40
 88%|████████▊ | 1112/1261 [34:51<04:29,  1.81s/it]
44 51
38 37
23 63
38 24
5 37
 88%|████████▊ | 1113/1261 [34:53<04:28,  1.81s/it]
44 51
38 37
23 63
38 24
5 37
 88%|████████▊ | 1114/1261 [34:54<04:26,  1.81s/it]
31 51
38 37
23 63
38 24
11 24
5 37
 88%|████████▊ | 1115/1261 [34:56<04:28,  1.84s/it]
31 51
25 37
11 63
38 24
11 12
5 37
 89%|████████▊ | 1116/1261 [34:58<04:26,  1.84s/it]
31 51
11 63
38 24
11 12
5 37
 89%|████████▊ | 1117/1261 [35:00<04:23,  1.83s/it]
31 51
11 63
11 12
5 37
 89%|████████▊ | 1118/1261 [35:02<04:20,  1.82s/it]
31 51
11 12
5 37
 89%|████████▊ | 1119/1261 [35:04<04:17,  1.81s/it]
31 38
5 37
7 12
 89%|████████▉ | 1120/1261 [35:05<04:15,  1.81s/it]
31 38
5 37
 89%|████████▉ | 1121/1261 [35:07<04:13,  1.81s/it]
31 38
5 37
 89%|████████▉ | 1122/1261 [35:09<04:11,  1.81s/it]
31 38
5 24
 89%|████████▉ | 1123/1261 [35:11<04:09,  1.81s/it]
31 38
5 24
 89%|████████▉ | 1124/1261 [35:13<04:06,  1.80s/it]
31 26
5 24
 89%|████████▉ | 1125/1261 [35:14<04:04,  1.79s/it]
31 26
5 24
 89%|████████▉ | 1126/1261 [35:16<04:02,  1.79s/it]
31 26
5 24
 89%|████████▉ | 1127/1261 [35:18<04:00,  1.80s/it]
23 25
 89%|████████▉ | 1128/1261 [35:20<03:59,  1.80s/it]
23 25
 90%|████████▉ | 1129/1261 [35:22<03:57,  1.80s/it]
23 25
 90%|████████▉ | 1130/1261 [35:23<03:57,  1.81s/it]
3 0
11 11
 90%|████████▉ | 1131/1261 [35:25<03:54,  1.81s/it]
3 0
11 11
 90%|████████▉ | 1132/1261 [35:27<03:53,  1.81s/it]
3 0
11 11
 90%|████████▉ | 1133/1261 [35:29<03:50,  1.80s/it]
3 0
11 11
 90%|████████▉ | 1134/1261 [35:31<03:48,  1.80s/it]
3 0
11 11
 90%|█████████ | 1135/1261 [35:32<03:47,  1.81s/it]
3 0
11 11
 90%|█████████ | 1136/1261 [35:34<03:45,  1.80s/it]
11 12
11 11
 90%|█████████ | 1137/1261 [35:36<03:43,  1.80s/it]
11 11
 90%|█████████ | 1138/1261 [35:38<03:40,  1.79s/it]
11 11
 90%|█████████ | 1139/1261 [35:40<03:38,  1.79s/it]
50 50
11 11
 90%|█████████ | 1140/1261 [35:41<03:37,  1.79s/it]
25 25
11 11
 90%|█████████ | 1141/1261 [35:43<03:35,  1.80s/it]
25 25
11 11
 91%|█████████ | 1142/1261 [35:45<03:33,  1.79s/it]
25 25
11 11
 91%|█████████ | 1143/1261 [35:47<03:31,  1.79s/it]
25 25
 91%|█████████ | 1144/1261 [35:48<03:29,  1.79s/it]
25 25
 91%|█████████ | 1145/1261 [35:50<03:26,  1.78s/it]
25 25
 91%|█████████ | 1146/1261 [35:52<03:24,  1.78s/it]
25 25
 91%|█████████ | 1147/1261 [35:54<03:23,  1.78s/it]
25 25
 91%|█████████ | 1148/1261 [35:56<03:21,  1.78s/it]
25 25
 91%|█████████ | 1149/1261 [35:57<03:21,  1.80s/it]
25 25
 91%|█████████ | 1150/1261 [35:59<03:18,  1.79s/it]
25 25
 91%|█████████▏| 1151/1261 [36:01<03:17,  1.79s/it]
25 25
 91%|█████████▏| 1152/1261 [36:03<03:14,  1.79s/it]
25 25
 91%|█████████▏| 1153/1261 [36:05<03:12,  1.79s/it]
25 25
 92%|█████████▏| 1154/1261 [36:06<03:11,  1.79s/it]
25 25
 92%|█████████▏| 1155/1261 [36:08<03:09,  1.79s/it]
25 25
 92%|█████████▏| 1156/1261 [36:10<03:07,  1.79s/it]
25 25
 92%|█████████▏| 1157/1261 [36:12<03:05,  1.79s/it]
19 25
 92%|█████████▏| 1158/1261 [36:13<03:03,  1.78s/it]
19 25
 92%|█████████▏| 1159/1261 [36:15<03:01,  1.78s/it]
12 25
 92%|█████████▏| 1160/1261 [36:17<02:59,  1.77s/it]
12 25
 92%|█████████▏| 1161/1261 [36:19<02:57,  1.77s/it]
12 25
 92%|█████████▏| 1162/1261 [36:21<02:55,  1.77s/it]
12 25
 93%|█████████▎| 1177/1261 [36:47<02:29,  1.78s/it]
37 50
 93%|█████████▎| 1179/1261 [36:51<02:26,  1.78s/it]
11 37
 94%|█████████▎| 1180/1261 [36:53<02:24,  1.79s/it]
11 37
 94%|█████████▎| 1181/1261 [36:54<02:22,  1.79s/it]
11 37
 94%|█████████▎| 1182/1261 [36:56<02:20,  1.78s/it]
11 37
 94%|█████████▍| 1183/1261 [36:58<02:18,  1.77s/it]
11 37
 94%|█████████▍| 1184/1261 [37:00<02:16,  1.78s/it]
11 37
 94%|█████████▍| 1185/1261 [37:01<02:15,  1.78s/it]
11 37
 94%|█████████▍| 1186/1261 [37:03<02:13,  1.78s/it]
11 37
 94%|█████████▍| 1187/1261 [37:05<02:12,  1.79s/it]
11 37
 94%|█████████▍| 1188/1261 [37:07<02:10,  1.79s/it]
11 37
 94%|█████████▍| 1189/1261 [37:09<02:09,  1.80s/it]
11 37
 94%|█████████▍| 1190/1261 [37:10<02:07,  1.79s/it]
38 50
11 37
 94%|█████████▍| 1191/1261 [37:12<02:04,  1.78s/it]
11 25
11 25
 96%|█████████▌| 1208/1261 [37:43<01:34,  1.77s/it]
37 37
 96%|█████████▌| 1209/1261 [37:44<01:32,  1.77s/it]
37 37
 96%|█████████▌| 1210/1261 [37:46<01:30,  1.78s/it]
37 37
 96%|█████████▌| 1211/1261 [37:48<01:29,  1.78s/it]
37 37
 96%|█████████▌| 1212/1261 [37:50<01:27,  1.79s/it]
37 37
 96%|█████████▌| 1213/1261 [37:51<01:25,  1.78s/it]
37 37
 96%|█████████▋| 1214/1261 [37:53<01:23,  1.77s/it]
37 37
 96%|█████████▋| 1215/1261 [37:55<01:21,  1.77s/it]
37 37
 96%|█████████▋| 1216/1261 [37:57<01:19,  1.77s/it]
37 37
 97%|█████████▋| 1217/1261 [37:59<01:18,  1.77s/it]
37 37
 97%|█████████▋| 1218/1261 [38:00<01:16,  1.78s/it]
37 37
 97%|█████████▋| 1219/1261 [38:02<01:14,  1.78s/it]
37 37
 97%|█████████▋| 1220/1261 [38:04<01:13,  1.78s/it]
25 37
 97%|█████████▋| 1221/1261 [38:06<01:11,  1.78s/it]
25 12
 97%|█████████▋| 1222/1261 [38:07<01:09,  1.78s/it]
24 12
 97%|█████████▋| 1223/1261 [38:09<01:08,  1.79s/it]
24 12
 97%|█████████▋| 1224/1261 [38:11<01:06,  1.79s/it]
24 12
 97%|█████████▋| 1225/1261 [38:13<01:03,  1.78s/it]
24 12
 97%|█████████▋| 1226/1261 [38:15<01:02,  1.77s/it]
24 12
 97%|█████████▋| 1227/1261 [38:16<01:00,  1.77s/it]
24 12
 97%|█████████▋| 1228/1261 [38:18<00:58,  1.77s/it]
24 12
 97%|█████████▋| 1229/1261 [38:20<00:56,  1.77s/it]
24 12
 98%|█████████▊| 1230/1261 [38:22<00:54,  1.76s/it]
24 12
 98%|█████████▊| 1231/1261 [38:23<00:53,  1.77s/it]
24 12
 98%|█████████▊| 1232/1261 [38:25<00:51,  1.77s/it]
24 12
 98%|█████████▊| 1233/1261 [38:27<00:49,  1.77s/it]
24 12
 98%|█████████▊| 1234/1261 [38:29<00:47,  1.77s/it]
24 12
17 31
 98%|█████████▊| 1235/1261 [38:30<00:46,  1.78s/it]
24 12
17 31
 98%|█████████▊| 1236/1261 [38:32<00:44,  1.77s/it]
12 11
24 12
17 31
 98%|█████████▊| 1237/1261 [38:34<00:42,  1.78s/it]
12 11
24 12
17 31
 98%|█████████▊| 1238/1261 [38:36<00:40,  1.77s/it]
12 11
24 12
12 31
 98%|█████████▊| 1239/1261 [38:38<00:39,  1.78s/it]
12 11
24 12
12 11
 98%|█████████▊| 1240/1261 [38:39<00:37,  1.77s/it]
12 11
24 12
12 11
 98%|█████████▊| 1241/1261 [38:41<00:35,  1.77s/it]
24 12
12 11
 98%|█████████▊| 1242/1261 [38:43<00:33,  1.76s/it]
24 12
12 11
 99%|█████████▊| 1243/1261 [38:45<00:31,  1.77s/it]
24 12
12 11
 99%|█████████▊| 1244/1261 [38:46<00:30,  1.77s/it]
24 12
12 11
 99%|█████████▊| 1245/1261 [38:48<00:28,  1.77s/it]
24 12
12 11
 99%|█████████▉| 1246/1261 [38:50<00:26,  1.78s/it]
24 12
12 11
 99%|█████████▉| 1247/1261 [38:52<00:24,  1.78s/it]
24 12
 99%|█████████▉| 1248/1261 [38:54<00:23,  1.78s/it]
24 12
 99%|█████████▉| 1249/1261 [38:55<00:21,  1.78s/it]
24 12
 99%|█████████▉| 1250/1261 [38:57<00:19,  1.77s/it]
24 12
37 24
 99%|█████████▉| 1251/1261 [38:59<00:17,  1.78s/it]
37 50
24 12
 99%|█████████▉| 1252/1261 [39:01<00:15,  1.77s/it]
37 50
24 12
 99%|█████████▉| 1253/1261 [39:02<00:14,  1.77s/it]
24 12
 99%|█████████▉| 1254/1261 [39:04<00:12,  1.77s/it]
6 38
24 12
100%|█████████▉| 1255/1261 [39:06<00:10,  1.77s/it]
6 38
24 12
100%|█████████▉| 1256/1261 [39:08<00:08,  1.79s/it]
6 38
24 12
100%|█████████▉| 1257/1261 [39:10<00:07,  1.79s/it]
6 38
24 12
100%|█████████▉| 1258/1261 [39:11<00:05,  1.79s/it]
6 38
24 12
100%|█████████▉| 1259/1261 [39:13<00:03,  1.79s/it]
6 38
24 12
100%|█████████▉| 1260/1261 [39:15<00:01,  1.80s/it]
24 12

[MoviePy] Done.
[MoviePy] >>>> Video ready: ./processed_project_video.mp4 

CPU times: user 38min 8s, sys: 1min 10s, total: 39min 19s
Wall time: 39min 16s
In [ ]: